문제

다음 열거형을 선언했습니다.

 public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }

TransactionTypeCode.Shipment에서 'S' 값을 가져오거나 TransactionTypeCode.Receipt에서 'R' 값을 얻으려면 어떻게 해야 합니까?

단순히 TransactionTypeCode.ToString()을 수행하면 Enum 이름 "Shipment" 또는 "Receipt"의 문자열이 제공되므로 겨자가 잘리지 않습니다.

도움이 되었습니까?

해결책

이 시도:

string value = (string)TransactionTypeCode.Shipment;

다른 팁

열거형의 기본 유형을 확인한 다음 적절한 유형으로 변환해야 합니다.

public enum SuperTasks : int
    {
        Sleep = 5,
        Walk = 7,
        Run = 9
    }

    private void btnTestEnumWithReflection_Click(object sender, EventArgs e)
    {
        SuperTasks task = SuperTasks.Walk;
        Type underlyingType = Enum.GetUnderlyingType(task.GetType());
        object value = Convert.ChangeType(task, underlyingType); // x will be int
    }    

나는 Enum.GetValues()가 당신이 찾고 있는 것이라고 믿습니다.

열거형의 기본 유형은 여전히 ​​int입니다. 단지 다음에서 암시적인 변환이 있다는 것뿐입니다. char 에게 int 몇 가지 이유.귀하의 열거 형은 다음과 같습니다

TransactionTypeCode { Shipment = 83, Receipt = 82, }

또한 enum 다음을 제외한 모든 정수 유형을 기본 유형으로 가질 수 있습니다. char, 아마도 의미론적인 이유 때문일 것입니다.이건 불가능 해:

TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', }

얻으려면 char 값을 되돌리면 캐스트를 사용할 수 있습니다.

var value = (char)TransactionTypeCode.Shipment;

// or to make it more explicit:
var value = Convert.ToChar(TransactionTypeCode.Shipment);

두 번째는 복싱을 유발하므로 더 나쁜 결과가 발생합니다.그래서 조금 더 좋을 수도 있습니다

var value = Convert.ToChar((int)TransactionTypeCode.Shipment);

하지만 못생긴.성능/가독성 트레이드오프를 고려할 때 저는 첫 번째(캐스트) 버전을 선호합니다..

나는 그것을 검색하고 있었고 솔루션이 Convert 클래스를 사용하게됩니다.

int value = Convert.ToInt32(TransactionTypeCode.Shipment);

얼마나 쉬운지 보세요

이것이 내가 일반적으로 열거형을 설정하는 방법입니다.

public enum TransactionTypeCode {

  Shipment("S"),Receipt ("R");

  private final String val;

  TransactionTypeCode(String val){
    this.val = val;
  }

  public String getTypeCode(){
    return val;
  }
}

System.out.println(TransactionTypeCode.Shipment.getTypeCode());

열거형의 기본 값은 숫자여야 합니다.기본 값의 유형이 알려진 경우 단순 형변환은 열거형의 특정 인스턴스에 대한 기본 값을 반환합니다.

enum myEnum : byte {Some = 1, SomeMore, Alot, TooMuch};
myEnum HowMuch = myEnum.Alot;
Console.Writeline("How much: {0}", (byte)HowMuch);

산출:얼마나 많이:삼

또는 (원래 질문에 더 가깝습니다)

enum myFlags:int {None='N',Alittle='A',Some='S',Somemore='M',Alot='L'};
myFlags howMuch = myFlags.Some;
Console.WriteLine("How much: {0}", (char)howMuch);
//If you cast as int you get the ASCII value not the character.

이것은 나에게 반복되는 질문입니다. 저는 간단한 캐스트를 통해 가치를 얻을 수 있다는 사실을 항상 잊어버립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top