从 IEnumerable<anonymousType> 获取值
Get Values from IEnumerable<anonymousType>
我有代码可以从 PropertyInfo 和 return 中获取 DisplayNameAttribute 和 return 一对
{Propertyname = "", DisplayName = ""}
public static IEnumerable GetDisplayNames<T>() => typeof(T).GetProperties()
.Where(p => p.IsDefined(typeof(DisplayNameAttribute), false))
.Select(p => new
{
PropertyName = p.Name,
DisplayName = p.GetCustomAttributes(typeof(DisplayNameAttribute),
false).Cast<DisplayNameAttribute>().Single().DisplayName
});
没问题,但我想我不太了解匿名类型,我想知道如何 return 为特定项目赋值(如果可能的话 - 尽管必须这样做)。
我认为它像 Dictionary 一样工作,但现在我知道它不是。
为了简化问题:
如何遍历这样的构造?
如果您想获得一个包含 属性 元组和显示名称的枚举,那么...
... 使用 tuples:
public static IEnumerable<(string propertyName, string displayName)> GetDisplayNames<T>()
=> typeof(T).GetProperties()
.Where(p => p.IsDefined(typeof(DisplayNameAttribute), false))
.Select(p =>
(
propertyName: p.Name,
displayName: p.GetCustomAttributes(typeof(DisplayNameAttribute), false)
.Cast<DisplayNameAttribute>().Single().DisplayName
)
);
或者您正在寻找像这样的字典:
public static Dictionary<string, string> GetDisplayNames<T>() =>
typeof(T).GetProperties()
.Where(p => p.IsDefined(typeof(DisplayNameAttribute), false))
.ToDictionary(
p => p.Name, // Key
p.GetCustomAttributes(typeof(DisplayNameAttribute), false)
.Cast<DisplayNameAttribute>()
[0] // Linq not really required
.DisplayName); // Value
我有代码可以从 PropertyInfo 和 return 中获取 DisplayNameAttribute 和 return 一对
{Propertyname = "", DisplayName = ""}
public static IEnumerable GetDisplayNames<T>() => typeof(T).GetProperties()
.Where(p => p.IsDefined(typeof(DisplayNameAttribute), false))
.Select(p => new
{
PropertyName = p.Name,
DisplayName = p.GetCustomAttributes(typeof(DisplayNameAttribute),
false).Cast<DisplayNameAttribute>().Single().DisplayName
});
没问题,但我想我不太了解匿名类型,我想知道如何 return 为特定项目赋值(如果可能的话 - 尽管必须这样做)。
我认为它像 Dictionary
如何遍历这样的构造?
如果您想获得一个包含 属性 元组和显示名称的枚举,那么...
... 使用 tuples:
public static IEnumerable<(string propertyName, string displayName)> GetDisplayNames<T>()
=> typeof(T).GetProperties()
.Where(p => p.IsDefined(typeof(DisplayNameAttribute), false))
.Select(p =>
(
propertyName: p.Name,
displayName: p.GetCustomAttributes(typeof(DisplayNameAttribute), false)
.Cast<DisplayNameAttribute>().Single().DisplayName
)
);
或者您正在寻找像这样的字典:
public static Dictionary<string, string> GetDisplayNames<T>() =>
typeof(T).GetProperties()
.Where(p => p.IsDefined(typeof(DisplayNameAttribute), false))
.ToDictionary(
p => p.Name, // Key
p.GetCustomAttributes(typeof(DisplayNameAttribute), false)
.Cast<DisplayNameAttribute>()
[0] // Linq not really required
.DisplayName); // Value