是否可以使用一个字典,其中给定键/值对的值根据键强制为特定类型?

时间:2017-08-22 20:35:22

标签: c# .net dictionary collections

具体来说,我正在尝试使用PropertyInfo类型的键创建一个字典,并且我想要强制执行List作为包含与键所描述的关联属性相同类型的对象的List。换句话说,一个字典描述了要分配给它们的一组属性和值。

我知道我可以简单地使用一个对象列表,但据我所知,这迫使我在运行时检查所包含列表类型的有效性,并强制我检查每个成员列表。

理想情况下,我希望在编译时强制执行此操作而不是运行时和/或无需验证列表中的任何个别成员。如果编译器在编译时无法真正确定属性的类型(我的特定用例处理将要知道的属性),我可以获得编译时错误。

我怀疑这可能是不可能的,因为编译器无法始终确定属性在运行时之前将具有的类型,但我希望我错过了可能允许的内容它。

2 个答案:

答案 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而获得智能感知。