당신 이 알 아야 할 States 필드 사용 규범
5529 단어 states비트 필드 매 거statesflags
최근 업무 중 에 일부 내용 을 만 났 습 니 다.여러분 과 공유 할 필요 가 있다 고 생각 합 니 다.우 리 는 데이터베이스 시트 의 상태 필드 를 통일 시 키 고 데이터 베이스 시트 디자인 을 통일 시 키 며 필드 가 프로그램 개발 에서 의 사용 방식 을 간소화 하기 위해 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
해결 방법
States 대응 비트 필드 매 거 StatesFlags.
/// <summary>
///
/// </summary>
[Flags]
[DataContract]
[EnumDescription(" ")]
public enum StatesFlags
{
/// <summary>
///
/// </summary>
[XmlEnum("1")]
[EnumDescription(" ")]
[EnumMember]
Enabled = 1,
/// <summary>
///
/// </summary>
[XmlEnum("2")]
[EnumDescription(" ")]
[EnumMember]
Disabled = 1 << 1,
/// <summary>
/// ( )
/// </summary>
[XmlEnum("4")]
[EnumDescription(" ")]
[EnumMember]
Removed = 1 << 2,
/// <summary>
/// ( )
/// </summary>
[XmlEnum("8")]
[EnumDescription(" ")]
[EnumMember]
Confirmed = 1 << 3,
/// <summary>
///
/// </summary>
[XmlEnum("16")]
[EnumDescription(" ")]
[EnumMember]
Locked = 1 << 4,
/// <summary>
///
/// </summary>
[XmlEnum("32")]
[EnumDescription(" ")]
[EnumMember]
LockLogin = 1 << 5
}
비 즈 니스 모델 사용 방식비 즈 니스 모델 에 서 는 모델 의 특정 상태 집합 을 주목 하고 새로운 상 태 를 기록 할 때 모델 에 있 는 States 를 사용 하여 읽 을 때 모든 상태 에서 독립 적 으로 읽 기 실현 을 제공 해 야 합 니 다.다음 그림 에서 IsRemoved 상 태 는 코드 를 보면 이 모델 이 몇 개의 상태 인지 알 수 있 습 니 다.
///<sumary>
/// ,
///</sumary>
public StatesFlags States { get; set; }
/// <summary>
///
/// </summary>
public bool IsRemoved => States.HasFlag(StatesFlags.Removed);
StatesFlags 의 4 가지 확장 방법
/// <summary>
///
/// </summary>
public static class StatesFlagsExtends
{
/// <summary>
///
/// </summary>
/// <param name="states"> </param>
public static StatesFlags SetEnable(this StatesFlags states)
{
if (states.HasFlag(StatesFlags.Disabled)) states = states ^ StatesFlags.Disabled;
if (!states.HasFlag(StatesFlags.Enabled)) states = states | StatesFlags.Enabled;
return states;
}
/// <summary>
///
/// </summary>
/// <param name="states"> </param>
public static StatesFlags SetDisable(this StatesFlags states)
{
if (states.HasFlag(StatesFlags.Enabled)) states = states ^ StatesFlags.Enabled;
if (!states.HasFlag(StatesFlags.Disabled)) states = states | StatesFlags.Disabled;
return states;
}
/// <summary>
///
/// </summary>
/// <param name="states"> </param>
/// <param name="state"> </param>
public static StatesFlags RemoveState(this StatesFlags states, StatesFlags state)
{
// states = states & ~StatesFlags.Disabled;
return states ^ state;
}
/// <summary>
///
/// </summary>
/// <param name="states"> </param>
/// <param name="state"> </param>
public static StatesFlags AttachState(this StatesFlags states, StatesFlags state)
{
return states | state;
}
}
Enable 과 Disable 은 서로 배척 하기 때문에 SetDisable,SetEnable 이 대응 합 니 다.다른 비 상호 배척 상 태 는 AttachState,RemoveState 를 추가 또는 제거 상태 로 제공 합 니 다.새로운 상태 가 나타 나 면 StatesFlags 에 추 가 됩 니 다.상 태 는 비트 필드 에서 매 거 진 것 입 니 다.연속 적 인 디지털 시 프 트 작업 을 사용 하여 코드 의 가 독성 을 증가 합 니 다.확장 방식 테스트 코드 첨부
[TestClass]
public class StatesFlagsTest
{
[TestMethod]
public void TestStatesExtends()
{
// 、 、
var state = StatesFlags.Enabled | StatesFlags.Locked | StatesFlags.Removed;
// SetDisable ,
state = state.SetDisable();
Assert.IsTrue(!state.HasFlag(StatesFlags.Enabled));
Assert.IsTrue(state.HasFlag(StatesFlags.Disabled));
// SetEnable ,
state = state.SetEnable();
Assert.IsTrue(state.HasFlag(StatesFlags.Enabled));
Assert.IsTrue(!state.HasFlag(StatesFlags.Disabled));
// RemoveState ,
state = state.RemoveState(StatesFlags.Locked);
Assert.IsTrue(!state.HasFlag(StatesFlags.Locked));
Assert.IsTrue(state.HasFlag(StatesFlags.Removed));
// AttachState ,
state = state.AttachState(StatesFlags.Confirmed);
Assert.IsTrue(state.HasFlag(StatesFlags.Confirmed));
// , states
state.AttachState(StatesFlags.Locked);
Assert.IsTrue(!state.HasFlag(StatesFlags.Locked));
}
}
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
당신 이 알 아야 할 States 필드 사용 규범최근 업무 중 에 일부 내용 을 만 났 습 니 다.여러분 과 공유 할 필요 가 있다 고 생각 합 니 다.우 리 는 데이터베이스 시트 의 상태 필드 를 통일 시 키 고 데이터 베이스 시트 디자인 을 통일 시 키 며 필...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.