我怎么能有一个c#枚举,如果我选择字符串它返回一个不同的字符串,就像在java中它可以通过
完成public enum sample{
some, other, things;
public string toString(){
switch(this){
case some: return "you choose some";
default: break;
}
}
}
Console.writeln(sample.some)
将输出:
you choose some
我只想让我的枚举在我尝试调用它们时返回不同的字符串。
答案 0 :(得分:12)
据我所知,这是不可能的。但是,您可以编写一个扩展方法来获取其他字符串:
public static class EnumExtensions
{
public static string ToSampleString(this SampleEnum enum)
{
switch(enum)
{
case SampleEnum.Value1 : return "Foo";
etc.
}
}
}
现在,只需在ToSampleString
:
SampleEnum
即可
mySampleEnum.ToSampleString();
如果您不熟悉C#
中的扩展程序,请阅读更多here。
另一种选择是在每个Description
值之上使用enum
属性,如here所述。
答案 1 :(得分:4)
我会通过创建一个属性来装饰它用它描述和装饰枚举值。
e.g。
public enum Rate
{
[Description("Flat Rate")]
Flat,
[Description("Time and Materials")]
TM
}
然后使用GetCustomAttributes
来读取/显示值。 http://msdn.microsoft.com/en-us/library/system.attribute.getcustomattributes.aspx
@CodeCamper对于迟到的回复感到抱歉,但这里有一些示例代码来阅读DescriptionAttribute:
扩展方法:
public static class EnumExtensions
{
public static string Description<T>(this T t)
{
var descriptionAttribute = (DescriptionAttribute) typeof (T).GetMember(t.ToString())
.First().GetCustomAttribute(typeof (DescriptionAttribute));
return descriptionAttribute == null ? "" : descriptionAttribute.Description;
}
}
用法:
Rate currentRate = Rate.TM;
Console.WriteLine(currentRate.Description());
答案 2 :(得分:3)
你想要一本字典。枚举器枚举(给出一个数字)其值。您希望在提供字符串键时返回字符串值。尝试类似:
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("some", "you choose some");
dictionary.Add("other", "you choose other");
dictionary.Add("things", "you choose things");
然后这段代码:
string value = dictionary["some"];
Console.writeln(value);
将返回“你选择一些”
答案 3 :(得分:0)
如果您只想将Enum作为字符串,可以使用此方法:
Enum.GetName(typeof(sample), value);
此方法将返回Enum的名称而不是int。