简体   繁体   English

在C#中的nestedProperty上使用InvokeMember

[英]Using InvokeMember on a nestedProperty in C#

I want to use the InvokeMember method for proceed to an OrderBy on a List but it works fine on simple types (string, datetime, etc...) but it fails on nested types... 我想使用InvokeMember方法继续执行List上的OrderBy,但在简单类型(字符串,日期时间等)上可以正常使用,但在嵌套类型上却无法使用...

Here my code : 这是我的代码:

System.Reflection.PropertyInfo property = typeof(myType).GetProperty(e.SortExpression);
gridView.DataSource = myList.OrderBy(item => typeof(myType).InvokeMember(property.Name, System.Reflection.BindingFlags.GetProperty, null, item, null));
gvOrders.DataBind();

And I need something like this : 我需要这样的东西:

System.Reflection.PropertyInfo property = typeof(myType).GetProperty(e.SortExpression);
gridView.DataSource = myList.OrderBy(item => typeof(myType).InvokeMember(property.GetNestedProperty("something").Name, System.Reflection.BindingFlags.GetProperty, null, item, null));
gvOrders.DataBind();

All advices are welcome :) 欢迎所有建议:)

If I'm understanding your question correctly you are trying to get a property which is not of type myType . 如果我正确地理解了您的问题,则您正在尝试获取非myType类型的属性。

public class Foo
{
    public Foo()
    {
        SomeBar = new Bar();
    }

    public class Bar
    {
        public string SomeProperty { get; set; }
    }

    public Bar SomeBar { get; set; }
}

You'll need to use Type.GetNestedType or Type.GetNestedTypes to extract the inner type. 您需要使用Type.GetNestedTypeType.GetNestedTypes提取内部类型。

var foo = new Foo();
foo.SomeBar.SomeProperty = "Hello";

var someProperty = typeof(Foo).GetNestedType("Bar").GetProperty("SomeProperty");

Console.WriteLine(someProperty.GetValue(foo.SomeBar));

Using your code: 使用您的代码:

PropertyInfo property = typeof(myType).GetNestedTypes()
                                      .First()
                                      .GetProperty(e.SortExpression);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM