Nice programing

c # : 문자열 상수를 저장하기 위해 열거 형을 사용하는 방법?

nicepro 2021. 1. 9. 11:38
반응형

c # : 문자열 상수를 저장하기 위해 열거 형을 사용하는 방법?


중복 가능성 :
문자열이있는 열거 형

열거 형에 문자열 상수를 가질 수 있습니다.

      enum{name1="hmmm" name2="bdidwe"}

그렇지 않은 경우 가장 좋은 방법은 무엇입니까?

나는 그것을 문자열에서 작동하지 않기 때문에 지금은 모든 관련 상수를 하나의 클래스로 그룹화하고 있습니다.

      class operation
      {
          public const string  name1="hmmm";
          public const string  name2="bdidwe"
      }

열거 형 상수는 서수 유형 ( int기본적으로) 만 가능 하므로 열거 형에 문자열 상수를 사용할 수 없습니다.

"문자열 기반 열거 형"과 같은 것을 원할 때 원치 않는 인스턴스화와 원치 않는 하위 클래스 화를 방지하기 위해 정적 클래스로 만드는 것을 제외하고는 여러분이했던 것처럼 상수를 보유 할 클래스를 만듭니다.

그러나 메서드 시그니처의 유형으로 문자열을 사용하지 않고 더 안전하고 제한적인 유형 (예 :)을 선호하는 Operation경우 안전한 열거 형 패턴을 사용할 수 있습니다.

public sealed class Operation
{
    public static readonly Operation Name1 = new Operation("Name1");
    public static readonly Operation Name2 = new Operation("Name2");

    private Operation(string value)
    {
        Value = value;
    }

    public string Value { get; private set; }
}

을 사용하여이 작업을 수행 할 수 DescriptionAttribute있지만 속성에서 문자열을 가져 오려면 코드를 작성해야합니다.

public enum YourEnum
{
    [Description("YourName1")]
    Name1,

    [Description("YourName2")]
    Name2
}

열거 형의 요점은 서수 상수입니다.
그러나 확장 방법을 사용하여 원하는 것을 얻을 수 있습니다.

  enum Operation
  {
      name1,
      name2
  }

  static class OperationTextExtender
  {
        public static String AsText(this Operation operation)
        {
              switch(operation)
              {
                    case Operation.name1: return "hmmm";
                    case Operation.name2: return "bdidwe";
                    ...
              }
        }
  }

  ...
  var test1 = Operation.name1;
  var test2 = test1.AsText();   

귀하 operation와 같은 컴파일되지 않습니다 클래스입니다 ... 당신이 NAME1 및 NAME2의 유형을 선언하지 않았다 ...

하지만 그게 제가 취할 접근법입니다 ... 예.

구조체로 만들면 원하는 값일 수도 있고 아닐 수도있는 값 유형이됩니다.

참조 URL : https://stackoverflow.com/questions/1851567/chow-to-use-enum-for-storing-string-constants

반응형