gpt4 book ai didi

c# - 创建从属性名称到具有该属性的类型的映射

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:49 25 4
gpt4 key购买 nike

我刚刚花了大约 20 分钟试图找出是否有一种简洁的/LINQy 方式来填充这个字典:

private Dictionary<string, List<Type>> _propertyMap;

它旨在成为一个字典,从有限的类型列表中将公共(public)属性的名称映射到具有此类属性的类型。

我敢肯定一定有一种聪明的方法来获取类型列表,并将其扩展为成对的 {Type, PropertyInfo}并从那里构建这本字典,但我就是无法理解它。

这是我填充这本词典的当前方式。 ( _types 是一个 List<Type> ):

_propertyMap = new Dictionary<string, List<Type>>();
foreach (var t in _types)
{
foreach (var p in t.GetProperties(
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance))
{
if (_propertyMap.ContainsKey(p.Name))
{
_propertyMap[p.Name].Add(t);
}
else
{
_propertyMap[p.Name] = new List<Type> {t};
}
}
}

最佳答案

您可以使用 LINQ 查询:

var flags = BindingFlags.Public | BindingFlags.Instance;

_propertyMap = _types.SelectMany(t => t.GetProperties(flags))
.GroupBy(p => p.Name)
.ToDictionary(g => g.Key,
g => g.Select(p => p.DeclaringType).ToList());

旁注 - 您可以使用 ILookup<string, Type>而不是 Dictionary<string, List<Type>>那么查询将是这样的:

_propertyMap = _types.SelectMany(t => t.GetProperties(flags))
.ToLookup(p => p.Name, p => p.DeclaringType);

关于c# - 创建从属性名称到具有该属性的类型的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865362/

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