如果反射中属性是集合,如何知道属性的类型?

发布于 2024-11-07 20:26:56 字数 725 浏览 0 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凤舞天涯 2024-11-14 20:26:56

使用 propertyInfo.PropertyType 而不是 propertyInfo.GetValue(obj,null).GetType() ,即使属性值为 null<,它也应该为您提供属性类型/代码>。

因此,当您

public class Foo {
    public List<string> MyProperty { get; set; }
}

obj 中有一个类似 Foo 的类和一个实例时,将为

var propertyInfo = obj.GetType().GetProperty("MyProperty"); // or find it in a loop like in your own example
var typeArg = propertyInfo.PropertyType.GetGenericArguments()[0];

您提供值 System.String (作为 System.String ) >System.Type 实例)在 typeArg 中。

Use propertyInfo.PropertyType instead of propertyInfo.GetValue(obj,null).GetType() which should give you the property type even if the property value is null.

So when you have a class like

public class Foo {
    public List<string> MyProperty { get; set; }
}

and an instance of Foo in obj, then

var propertyInfo = obj.GetType().GetProperty("MyProperty"); // or find it in a loop like in your own example
var typeArg = propertyInfo.PropertyType.GetGenericArguments()[0];

will give you the value System.String (as a System.Type instance) in typeArg.

囍孤女 2024-11-14 20:26:56

使用具有名为 IsGenericType 的属性的 propertyInfo.PropertyType,例如:

if (propertyInfo.PropertyType.IsGenericType)
{
    // code ...
}

Use propertyInfo.PropertyType which has property with name IsGenericType, e.g.:

if (propertyInfo.PropertyType.IsGenericType)
{
    // code ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文