gpt4 book ai didi

c# - 如何从静态类获取常量到 List

转载 作者:行者123 更新时间:2023-12-04 09:43:59 25 4
gpt4 key购买 nike

我有一个带有常量的静态类,我想将其存储在一个列表中,以便在 DropDown 中使用

public static class DateFormatConstant
{
[Display(Name = "DD/MM/YYYY")]
public const string DayMonthYear = "dd/MM/yyyy";
[Display(Name = "MM/DD/YYYY")]
public const string MonthDayYear = "MM/dd/yyyy";
[Display(Name = "YYYY/MM/DD")]
public const string YearMonthDay = "yyyy/MM/dd";
[Display(Name = "MM/DD/YY")]
public const string MonthDayTwoDigitYear = "MM/dd/yy";
}

有没有办法让他们进入 List<SelectListItem> ?

最佳答案

answer from @maembe利用反射是一个很好的方法。但是由于您已经使用 Display 装饰了您的常量。属性 我将扩展此解决方案以使用该属性。请注意,我在这里使用 LINQ 的查询语法,而不是其他答案中的方法语法。

这是我的代码:

var selectLisItems =
from f in typeof(DateFormatConstant).GetFields(BindingFlags.Public | BindingFlags.Static)
where f.IsLiteral && f.FieldType == typeof(string)
from a in f.CustomAttributes
where a.AttributeType == typeof(DisplayAttribute)
let na = a.NamedArguments.First(x => x.MemberName == nameof(DisplayAttribute.Name))
select new SelectListItem
{
Text = (string)na.TypedValue.Value,
Value = (string)f.GetRawConstantValue()
};

var list = selectLisItems.ToList();

它实际上有什么作用?让我们看看查询的各个部分。
    from f in typeof(DateFormatConstant).GetFields(BindingFlags.Public | BindingFlags.Static)
where f.IsLiteral && f.FieldType == typeof(string)

在这里,我从 DateFormatConstant 中选择所有常量类型为 string 的类.
    from a in f.CustomAttributes
where a.AttributeType == typeof(DisplayAttribute)

现在我仅限于实际具有 Display 的常量。属性。注意这里的“真实”类型是 DisplayAttribute
    let na = a.NamedArguments.First(x => x.MemberName == nameof(DisplayAttribute.Name))

接下来是通过属性的参数并搜索 Name .我可以放心使用 First在这里是因为我已经限制在 DisplayAttribute输入并因此知道它有一个 Name属性(property)。
    select new SelectListItem
{
Text = (string)na.TypedValue.Value,
Value = (string)f.GetRawConstantValue()
};

var list = selectLisItems.ToList();

最后我正在构建 SelectListItem从属性和字段中创建所需的 List<SelectListItem>从查询。

注:所有这些都假设您希望类中的所有字符串常量都包含在列表中。如果您的类包含更多应该放在不同列表中的常量,您可以使用 GroupName Display 的属性(property)属性将常量组合在一起。我将把它作为一个练习来相应地扩展代码。

关于c# - 如何从静态类获取常量到 List<SelectListItem>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62203624/

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