我想使用 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();
欢迎所有的建议:)
如果我对你的问题的理解正确,那么你正在尝试获取类型不是 myType
的属性。
public class Foo
{
public Foo()
{
SomeBar = new Bar();
}
public class Bar
{
public string SomeProperty { get; set; }
}
public Bar SomeBar { get; set; }
}
您需要使用 Type.GetNestedType
或 Type.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);
我是一名优秀的程序员,十分优秀!