나는 도우미가 필요한 방법을 비교 char 열거하고 문 박스를 개체

StackOverflow https://stackoverflow.com/questions/105609

  •  01-07-2019
  •  | 
  •  

문제

나는 열거는 다음과 같습니다:

public enum TransactionStatus { Open = 'O', Closed = 'C'};

나는 데이터를 수집하는 데이터베이스에서 한 문자를 나타내는-당신은 그것을 짐작지'O'트랜잭션이 열리는'C'트랜잭션이 닫힙니다.

이 때문에 데이터의 데이터베이스를 객체로 나는 지옥이 시간의 비교를 쓰기 코드입니다.

할 수 있습니가 쓰기:

protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) {
    return ((char)enum_status).ToString() == obj_status.ToString();
}

그러나,이것은 하지만 문 열거는 다루어야,나는 5 6 고 쓰는 방법과 동일한 방법 그들을 위해 모든 태평양 지역 최고. 아마도 모든 열거 상속에서 시스템입니다.Enum 하지만하려고 하면 설정을 입력으로 유형을 얻을 컴파일에 오류가 있습니다.이것은 또한다.NET1.1 그래서 제네릭은 질문입니다.

는 이습니다.지지 않는 더 나은 방법으로 이 글을 쓰는 방법은?또한,누구나 명확히 하는 전체 열거 상속에서 시스템입니다.열거되지 않은 다형성은 것은?

도움이 되었습니까?

해결책

static void Main(string[] args)
{
    object val = 'O';
    Console.WriteLine(EnumEqual(TransactionStatus.Open, val));

    val = 'R';
    Console.WriteLine(EnumEqual(DirectionStatus.Left, val));

    Console.ReadLine();
}

public static bool EnumEqual(Enum e, object boxedValue)
{                        
    return e.Equals(Enum.ToObject(e.GetType(), (char)boxedValue));
}

public enum TransactionStatus { Open = 'O', Closed = 'C' };
public enum DirectionStatus { Left = 'L', Right = 'R' };

다른 팁

열거형은 일반적으로 지저분에서는 C#그래서 사용하는 경우.NET2.0 는 그것의 일반적인 포장을 구문으로 제네릭이 하는 것을 피하기 위해 쓰기 같은 서투른 코드입니다.

습니다.NET1.1 당신이 무언가를 할 수 있는 아래와 같이지만,그것은 더 이상 본래 snippet:

protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status)
{
    return (enum_status == Enum.Parse(typeof(TransactionStatus), obj_status.ToString()));
}

이것은 동일한 금액에 대 한 코드 하지만 당신은 지금 하는 열거보다 문자열을 비교합니다.

할 수 있도를 사용하여 디버거/는 설명서를 참조하는 경우 obj_status 정말 개체나 수 있는지 여부를 안전하게 캐스팅에는 문자열을 사용합니다.

나는 살펴 Enum.구문 분석합니다.그것은 당신이 구문 분석하 char 으로 적절한 열거.나는 그것을 믿는 모든 작품으로 돌아가는 길 C#1.0.귀하의 코드보는 다음과 같이 비트:

TransactionStatus status = (TransactionStatus)Enum.Parse(typeof(TransactionStatus), obj.ToString());

그냥 있으면 값을 비교하기 같은 것을 사용할 수 있습니다:

protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) {
    return (char)enum_status == (char)obj_status;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top