2

我想使用 InvokeMember 方法在 List 上进行 OrderBy,但它在简单类型(字符串、日期时间等)上工作正常,但在嵌套类型上失败......

这是我的代码:

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();

我需要这样的东西:

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();

欢迎所有建议:)

4

1 回答 1

0

如果我正确理解了您的问题,那么您正在尝试获取不是 type 的属性myType

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

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

    public Bar SomeBar { get; set; }
}

您需要使用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));

使用您的代码:

PropertyInfo property = typeof(myType).GetNestedTypes()
                                      .First()
                                      .GetProperty(e.SortExpression);
于 2013-07-23T13:16:27.893 回答