BindingFlags.IgnoreCase不适用于Type.GetProperty()?

时间:2008-11-05 10:05:11

标签: c# reflection getproperty bindingflags

想象一下以下

T型有一个字段公司。 执行以下方法时,它可以完美地运行:

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

以下调用我通过

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

有人有个主意吗?

3 个答案:

答案 0 :(得分:325)

您已经覆盖了默认的查找标志,如果您指定了新标记,则需要提供所有信息以便找到该属性。例如:BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

答案 1 :(得分:26)

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

答案 2 :(得分:10)

谢谢,这真的帮助我今天紧张。我保存了审核信息,但在属性名称上包含了错误的大小写。 (审计是内置于数据层中的。)无论如何,我必须添加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的课程的一部分。