我对以下Nullable类型的行为感到困惑:
class TestClass {
public int? value = 0;
}
TestClass test = new TestClass();
Run Code Online (Sandbox Code Playgroud)
现在,Nullable.GetUnderlyingType(test.value)返回基础Nullable类型,即int.但是,如果我尝试获得这样的字段类型
FieldInfo field = typeof(TestClass).GetFields(BindingFlags.Instance | BindingFlags.Public)[0];
Run Code Online (Sandbox Code Playgroud)
我援引
Nullable.GetUnderlyingType(field.FieldType).ToString()
Run Code Online (Sandbox Code Playgroud)
它返回一个System.Nullable[System.Int32]类型.因此,这意味着该方法Nullable.GetUnderlyingType()具有不同的行为,具体取决于您获取成员类型的方式.为什么会这样?如果我只是使用我test.value怎么能告诉它Nullable没有使用反射?
我有一个对象instance的哪些
instance.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)
Run Code Online (Sandbox Code Playgroud)
是真的.我的问题是,如何在不真正了解其泛型类型的情况下从该对象中提取键值对?我想得到类似的东西KeyValuePair<object, object>[].请注意,我也知道字典在运行时使用的泛型类型(但不是编译时).我认为需要某种反思?
后续:是否有一种通用的机制来转换object为SomeClass<>(如果我知道这是正确的类型,当然)并因此使用它,因为类的实现不受泛型参数类型的影响?