gpt4 book ai didi

c# - 将枚举值与本地化字符串资源链接

转载 作者:太空狗 更新时间:2023-10-29 21:02:21 24 4
gpt4 key购买 nike

相关: Get enum from enum attribute

我想要一种最易于维护的方式来绑定(bind)枚举并将其与本地化字符串值相关联。

如果我将枚举和类放在同一个文件中,我会觉得有些安全,但我必须假设有更好的方法。我也考虑过让枚举名称与资源字符串名称相同,但恐怕我不能总是在这里强制执行。

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;
}
}
}

最佳答案

您可以将 DescriptionAttribute 添加到每个枚举值。

public enum SourceFilterOption
{
[Description("LAST_NUMBER_OF_OCCURANCES")]
LastNumberOccurences,
...
}

需要的时候拉出描述(资源键)。

FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute),
if (attributes.Length > 0)
{
return attributes[0].Description;
}
else
{
return value.ToString();
}

http://geekswithblogs.net/paulwhitblog/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx

编辑:对评论的回应 (@Tergiver)。在我的示例中使用(现有的)DescriptionAttribute 是为了快速完成工作。您最好实现自己的自定义属性,而不是使用超出其目的的自定义属性。像这样:

[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inheritable = false)]
public class EnumResourceKeyAttribute : Attribute
{
public string ResourceKey { get; set; }
}

关于c# - 将枚举值与本地化字符串资源链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com