[英]Why reflection does not find property
我上课了:
class Person
{
public string Name { get { return "Antonio"; } }
}
和守则:
IEnumerable<object> uncknownObject;
uncknownObject = new ObservableCollection<Person>( );
var observCol = uncknownObject.GetType( );
var x = ( ( dynamic )observCol ).GenericTypeArguments[ 0 ];
var y = observCol.GetProperty( "GenericTypeArguments" );
var instance = ( Person )Activator.CreateInstance( x );
Console.WriteLine( instance.Name ); // Print Antonio!!!
为什么y == null
?
注意图片:
调试器显示属性GenericTypeArguments应该存在,代码显示opossite。 可以证明调试器是正确的,并且该属性存在,因为那时x怎么不是null。 如果该属性存在,那么为什么y
等于null !!! ???
感谢Ani我现在有:
IEnumerable<object> uncknownObject;
uncknownObject = new ObservableCollection<Person>();
var observCol = uncknownObject.GetType();
var genTypeArgsProperty = typeof(Type).GetProperty("UnderlyingSystemType");
var genTypeArgsValue = (genTypeArgsProperty.GetValue(observCol, null));
var f = genTypeArgsValue.GetType().GetMethod("GetGenericArguments");
IEnumerable<object> result = (IEnumerable<object>)f.Invoke(genTypeArgsValue, null);
var x = result.FirstOrDefault();
var instance = Activator.CreateInstance( (Type)x );
我真的不明白你要用所有这些元元反射完成什么,但你似乎误解了Type.GetProperty
作用。 它获取System.Type
实例(在本例中为ObservableCollection<Person>
)表示的实际类型上的属性的元数据。 它不会对声明的属性获取元数据System.Type
本身,当然,除非你把它叫做一个System.Type
代表System.Type
本身。
在您的情况下, y
为null,因为ObservableCollection<Person>
没有名为“GenericTypeArguments”的属性。
试试这个:
var genTypeArgsProperty = typeof(Type).GetProperty("GenericTypeArguments");
var genTypeArgsValue = (Type[]) (genTypeArgsProperty.GetValue(observCol, null));
var onlyTypeArgValue = genTypeArgsValue.Single();
此代码适用于net framework 4:
IEnumerable<object> uncknownObject;
uncknownObject = new ObservableCollection<Person>();
var observCol = uncknownObject.GetType();
var x = ((dynamic) observCol).UnderlyingSystemType.GetGenericArguments()[0];
var y = observCol.GetGenericArguments();
var instance = (Person)Activator.CreateInstance(x);
Console.WriteLine(instance.Name); // Print Antonio!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.