gpt4 book ai didi

c# - 将特定于文化的枚举 DisplayName 字符串转换为枚举

转载 作者:行者123 更新时间:2023-11-30 18:19:25 27 4
gpt4 key购买 nike

我创建了一个小型应用程序,我现在正在为每个页面上的常量定义区域性特定文本。我一直在使用一些 Enum DropDownLists,并且一直在为要显示的字符串名称的每个 Enum 值使用 Display(Name="Something") 属性。

现在我正在使用资源文件来根据文化确定文本,我不得不将属性值更改为 [Display(Name="SomeResourceValue", ResourceType=typeof(Resources.Resources))]

我遇到的问题是我有一个静态方法接受字符串 DisplayName 并返回 Enum 值(提供 Enum 类型),自引入以来现在不起作用资源文件。

我尝试改进的方法如下:

//Converts Enum DisplayName attribute text to it's Enum value 
public static T GetEnumDisplayNameValue<T>(this string name)
{
var type = typeof(T);
if (!type.IsEnum)
throw new ArgumentException();
FieldInfo[] fields = type.GetFields();
var field = fields
.SelectMany(f => f.GetCustomAttributes(
typeof(DisplayAttribute), false), (
f, a) => new { Field = f, Att = a }).SingleOrDefault(a => ((DisplayAttribute)a.Att)
.Name == name);

return field == null ? default(T) : (T)field.Field.GetRawConstantValue();
}

如果有人可以帮助我改进它以允许资源查找,我将不胜感激。

最佳答案

The working solution is as follows:

    public static T GetEnumDisplayNameValue<T>(this string name, CultureInfo culture)
{
var type = typeof(T);
if (!type.IsEnum)
throw new ArgumentException();
FieldInfo[] fields = type.GetFields();

var field = fields.SelectMany(f => f.GetCustomAttributes(typeof(DisplayAttribute), false),
(f, a) => new { Field = f, Att = a })
.SingleOrDefault(a => Resources.ResourceManager.GetString(((DisplayAttribute)a.Att).Name, culture) == name);

return field == null ? default(T) : (T)field.Field.GetRawConstantValue();
}

关于c# - 将特定于文化的枚举 DisplayName 字符串转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38791149/

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