如果反射中属性是集合,如何知道属性的类型?
List<MyClass> MyClassPro
{
get;set;
}
MyClass obj = new MyClass();
obj.MyClassPro = null;
考虑 MyClassPro 为空。在反射的情况下,我不会知道类名或属性名称。
如果我尝试使用像这样的 GetType 来获取属性的类型,
Type t = obj.GetType();
它会返回“System.Collections.Generic.list。但我的期望是将类型获取为 MyClass。
我也尝试了类似的方式
foreach(PropertyInfo propertyInfo in obj.GetProperties())
{
if(propertyInfo.IsGenericType)
{
Type t = propertyInfo.GetValue(obj,null).GetType().GetGenericArguments().First();
}
}
,但它返回错误,因为集合属性的值为空,因此我们无法获取类型。
在这种情况下,我如何获取集合属性的类型,
请帮助我
!
List<MyClass> MyClassPro
{
get;set;
}
MyClass obj = new MyClass();
obj.MyClassPro = null;
Consider the MyClassPro is null. In situation of Reflection i wont be knowing the Classname or Property Name.
If i try to get the Type of property using GetType like ,
Type t = obj.GetType();
It is returning "System.Collections.Generic.list. But my expectation is to get the Type as MyClass.
I also tried the way like
foreach(PropertyInfo propertyInfo in obj.GetProperties())
{
if(propertyInfo.IsGenericType)
{
Type t = propertyInfo.GetValue(obj,null).GetType().GetGenericArguments().First();
}
}
But it is returning error because of the Value of the collection property is null so we cant get the Type.
In this situation how can i get the Type of a collection Property.
Please help me !
Thanks in Advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
propertyInfo.PropertyType
而不是propertyInfo.GetValue(obj,null).GetType()
,即使属性值为null<,它也应该为您提供属性类型/代码>。
因此,当您
在
obj
中有一个类似Foo
的类和一个实例时,将为您提供值
System.String
(作为System.String
) >System.Type 实例)在typeArg
中。Use
propertyInfo.PropertyType
instead ofpropertyInfo.GetValue(obj,null).GetType()
which should give you the property type even if the property value isnull
.So when you have a class like
and an instance of
Foo
inobj
, thenwill give you the value
System.String
(as aSystem.Type
instance) intypeArg
.使用具有名为
IsGenericType
的属性的propertyInfo.PropertyType
,例如:Use
propertyInfo.PropertyType
which has property with nameIsGenericType
, e.g.: