我不时会看到如下的枚举:
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
Run Code Online (Sandbox Code Playgroud)
我不明白[Flags]-attribute 到底是做什么的.
任何人都可以发布一个很好的解释或示例?
我似乎无法让本地化工作.
我有一个类库.现在我想在那里创建resx文件,并根据线程文化返回一些值.
我怎样才能做到这一点?
相关: 从枚举属性获取枚举
我希望以最可维护的方式绑定枚举,并将它与关联的本地化字符串值相关联.
如果我把枚举和类放在同一个文件中,我觉得有些安全,但我必须假设有更好的方法.我还考虑过将枚举名称与资源字符串名称相同,但我担心我不能总是在这里强制执行.
using CR = AcmeCorp.Properties.Resources;
public enum SourceFilterOption
{
LastNumberOccurences,
LastNumberWeeks,
DateRange
// if you add to this you must update FilterOptions.GetString
}
public class FilterOptions
{
public Dictionary<SourceFilterOption, String> GetEnumWithResourceString()
{
var dict = new Dictionary<SourceFilterOption, String>();
foreach (SourceFilterOption filter in Enum.GetValues(typeof(SourceFilterOption)))
{
dict.Add(filter, GetString(filter));
}
return dict;
}
public String GetString(SourceFilterOption option)
{
switch (option)
{
case SourceFilterOption.LastNumberOccurences:
return CR.LAST_NUMBER_OF_OCCURANCES;
case SourceFilterOption.LastNumberWeeks:
return CR.LAST_NUMBER_OF_WEEKS;
case SourceFilterOption.DateRange:
default:
return CR.DATE_RANGE;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的自定义枚举类型上创建了一个扩展方法
public static class GetLocEnum
{
private static string Translate(this MyEnum e, int lang)
{
string res = string.Empty;
if (lang == 1)
{
switch (e)
{
case MyEnum.OptionOne:
res = "some title";
break;
case MyEnum.OptionTwo:
res = "some title 2";
break;
case MyEnum.OptionThree:
res = "some title 3";
break;
}
}
// more if's ...
return res;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我现在无法将其用作扩展MyEnum.Translate()?