BindingFlags。IgnoreCase不为Type.GetProperty()工作?

想象一下

类型T有一个字段Company。 当执行以下方法时,它工作得很好:

Type t = typeof(T);
t.GetProperty("Company")

下面的调用得到null

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)

有人知道吗?

47909 次浏览

你需要添加BindingFlags.Public | BindingFlags.Instance

你已经覆盖了默认的查找标志,如果你指定了新的标志,你需要提供所有的信息,这样属性就可以被找到。例如:BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

谢谢,这真的帮了我大忙。我保存了审计信息,但属性名称的大小写不正确。(审计内置在数据层中。)总之,我必须添加IgnoreCase作为绑定标志,但它仍然不起作用,直到我的同事找到了这个答案。得到的函数:

public static void SetProperty(Object R, string propertyName, object value)
{
Type type = R.GetType();
object result;
result = type.InvokeMember(
propertyName,
BindingFlags.SetProperty |
BindingFlags.IgnoreCase |
BindingFlags.Public |
BindingFlags.Instance,
null,
R,
new object[] { value });
}

这是我称之为DotMagic的课程的一部分。