具体来说,我正在尝试使用PropertyInfo类型的键创建一个字典,并且我想要强制执行List作为包含与键所描述的关联属性相同类型的对象的List。换句话说,一个字典描述了要分配给它们的一组属性和值。
我知道我可以简单地使用一个对象列表,但据我所知,这迫使我在运行时检查所包含列表类型的有效性,并强制我检查每个成员列表。
理想情况下,我希望在编译时强制执行此操作而不是运行时和/或无需验证列表中的任何个别成员。如果编译器在编译时无法真正确定属性的类型(我的特定用例处理将要知道的属性),我可以获得编译时错误。
我怀疑这可能是不可能的,因为编译器无法始终确定属性在运行时之前将具有的类型,但我希望我错过了可能允许的内容它。
答案 0 :(得分:0)
你没有错过任何东西。这是不可能的,因为在编译时没有与PropertyInfo
相关联的属性类型信息。它甚至不是通用类型(如List<T>
)。
答案 1 :(得分:0)
您可以创建Dictionary<PropertyInfo, dynamic>
,但无法在编译时检查它。您可以通过执行以下操作为给定键创建值:
class MyClass
{
public int Property { get; set; }
}
var dict = new Dictionary<PropertyInfo, dynamic>();
var propertyInfo = typeof(MyClass).GetProperty(nameof(MyClass.Property));
dict.Add(propertyInfo, Activator.CreateInstance(typeof(List<>).MakeGenericType(propertyInfo.PropertyType)));
dict[propertyInfo].GetType()
是List<int>
,但您不会因为它dynamic
而获得智能感知。