C # 숫자 열거 형 값 (문자열)
다음 열거 형이 있습니다.
public enum Urgency {
VeryHigh = 1,
High = 2,
Routine = 4
}
열거 형 "값"을 다음과 같은 문자열로 가져올 수 있습니다 .
((int)Urgency.Routine).ToString() // returns "4"
참고 : 이것은 다음과 다릅니다.
Urgency.Routine.ToString() // returns "Routine"
(int)Urgency.Routine // returns 4
구문 적 설탕을 제공하는 확장 클래스 또는 정적 utliity 클래스를 만들 수있는 방법이 있습니까? :)
Enums ToString 메서드의 오버로드를 사용하여 형식 문자열을 제공 할 수 있어야합니다. 그러면 enum 값이 문자열로 출력됩니다.
public static class Program
{
static void Main(string[] args)
{
var val = Urgency.High;
Console.WriteLine(val.ToString("D"));
}
}
public enum Urgency
{
VeryHigh = 1,
High = 2,
Low = 4
}
열거 형에 대해보다 "인간이 읽을 수있는"설명을 얻기 위해 (예 : 예에서 "VeryHigh"가 아닌 "Very High") 다음과 같은 속성을 사용하여 열거 형 값을 장식했습니다.
public enum MeasurementType
{
Each,
[DisplayText("Lineal Metres")]
LinealMetre,
[DisplayText("Square Metres")]
SquareMetre,
[DisplayText("Cubic Metres")]
CubicMetre,
[DisplayText("Per 1000")]
Per1000,
Other
}
public class DisplayText : Attribute
{
public DisplayText(string Text)
{
this.text = Text;
}
private string text;
public string Text
{
get { return text; }
set { text = value; }
}
}
그런 다음 다음과 같은 확장 방법을 사용했습니다.
public static string ToDescription(this Enum en)
{
Type type = en.GetType();
MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(
typeof(DisplayText),
false);
if (attrs != null && attrs.Length > 0)
return ((DisplayText)attrs[0]).Text;
}
return en.ToString();
}
그런 다음 전화하십시오.
myEnum.ToDescription ()열거 형을 더 읽기 쉬운 텍스트로 표시하기 위해.
If you want to just deal with this enum, use Mark Byer's solution.
For a more general solution:
public static string NumberString(this Enum enVal)
{
return Convert.ToDecimal(enVal).ToString("0");
}
Converting to decimal means you don't need to deal with the 8 different allowed underlying integral types explicitly, as all of them convert losslessly to decimal but not to each other (ulong and long don't convert losslessly between each other but both can handle all the rest). Doing that would probably be faster (esp. if you pick well in your order of comparison), but a lot more verbose for relatively little gain.
Edit:
The above isn't as good as Frankentosh's though, Frankentosh saw through the question to the real problem and solves it very eloquently.
How about a little reflection? Should work with all underlying types.
public static class EnumTools
{
public static string ToRawValueString(this Enum e)
{
return e
.GetType()
.GetFields(BindingFlags.Public | BindingFlags.Static)
.First(f => f.Name==e.ToString())
.GetRawConstantValue()
.ToString();
}
}
Then:
Console.WriteLine(Urgency.High.ToRawValueString()); //Writes "2"
Great stuff ... I have now added an extension method to my project
public static class EnumExtensions
{
public static string NumberString(this Enum enVal)
{
return enVal.ToString("D");
}
}
Now I can get the int value - as a string - by calling Urgency.Routine.NumberString();
Thanks to Frankentosh and Jon :)
You can write an extension method for your specific type:
public static class UrgencyExtension
{
public static string ToIntegerString(this Urgency u)
{
return ((int)u).ToString();
}
}
Use as follows:
Urgency u = Urgency.Routine;
string s = u.ToIntegerString();
If you wanted, you could make the extension method work for all enums:
public static string ToValueString(this Enum enumValue)
{
if (enumValue.GetType().GetEnumUnderlyingType() == typeof(int))
return ((int)(object)enumValue).ToString();
else if (enumValue.GetType().GetEnumUnderlyingType() == typeof(byte))
return ((byte)(object)enumValue).ToString();
...
}
a simple approach
((Urgency)4).ToString() // returns "Routine"
참고URL : https://stackoverflow.com/questions/3444699/c-sharp-numeric-enum-value-as-string
'Development Tip' 카테고리의 다른 글
.NET 리플렉션에서 BindingFlags.DeclaredOnly와 함께 GetProperties () 사용 (0) | 2020.12.14 |
---|---|
printf에서`% p`는 어디에 유용합니까? (0) | 2020.12.14 |
Android : 버튼을 길게 클릭-> 작업 수행 (0) | 2020.12.14 |
ASP.NET WebApi : WebApi HttpClient를 사용하여 파일 업로드로 멀티 파트 게시를 수행하는 방법 (0) | 2020.12.14 |
SQL에서 Union All과 함께 Order by를 사용하는 방법은 무엇입니까? (0) | 2020.12.14 |