我正在为C#学习。
我听说C#是最具可构造性的语言之一。所以你们能让我的代码更优雅更高效吗?
public class ISO639
{
public enum ISO639Code
{
Afrikaans, //af
Albanian, //sq
Amharic, //am
...
Yiddish, //yi
Unknown
}
public static string GetISO639CodeString(ISO639.ISO639Code l)
{
switch (l)
{
case ISO639Code.English: return "en";
case ISO639Code.Japanese: return "ja";
...
case ISO639Code.Hebrew: return "he";
default: return "";
}
public static ISO639.ISO639Code GetISO39CodeValue(string s)
{
switch (s)
{
case "ko" : return ISO639Code.Korean;
case "en" : return ISO639Code.English;
...
case "hu" : return ISO639Code.Hungarian;
default: return ISO639Code.Unknown;
}
}
}这是我的班级ISO639。这个类为ISO639代码提供了枚举,但是我需要一个从ISO639枚举到普通字符串的类型转换。(例如ISO639.ISO639Code.Italian => "it")。我还需要一个从普通字符串到ISO639枚举的类型转换。(例如"it“=> ISO639.ISO639Code.Italian)。
有没有更有效的编码风格呢?
发布于 2011-07-26 18:38:08
您可以将标准System.ComponentModel.Description属性添加到每个枚举条目中,然后读取它。
public enum ISO639Code
{
[Description("af")]
Afrikaans
}
public static class EnumExtensions
{
// Extension method to read Description value
public static string GetDescription(this Enum currentEnum)
{
var fi = currentEnum.GetType().GetField(currentEnum.ToString());
var da = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));
return da != null ? da.Description : currentEnum.ToString();
}
}
// **How-to read it**
ISO639Code isoCode = ISO639Code.Afrikaans;
// this will returns "af"
string isoDescription = isoCode.GetDescription(); 编辑:
string searchFor = "af";
ISO639Code foundEntry;
// Loop through all entries descriptions
var allEntries = Enum.GetValues(typeof(ISO639Code));
foreach (var entry in allEntries)
{
// If you will extract this as separate method and use it for search not only loop
// through the all entries - you can put here is yield return description
var currentEntry = ((ISO639Code)entry);
string description = currentEntry.GetDescription();
if (description == searchFor)
{
foundEntry = currentEntry;
break;
}
}发布于 2011-07-26 18:35:45
好的。您可以使用attributes
public enum ISO639Code
{
[CodeString("af")] Afrikaans,
[CodeString("sq")] Albanian,
}发布于 2011-07-26 18:36:48
使用字典,例如:new Dictionary<ISO639Code, string>。
https://stackoverflow.com/questions/6828704
复制相似问题