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

发布于 2024-07-08 13:46:56 字数 273 浏览 12 评论 0原文

想象一下下面的

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

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

但以下调用我得到 null 吗?

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

尽管有人有想法,

Imagine the following

A type T has a field Company.
When executing the following method it works perfectly:

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

Whith the following call I get null though

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

Anybody got an idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时光与爱终年不遇 2024-07-15 13:46:56

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

You've overwritten the default look-up flags, if you specify new flags you need to provide all the info so that the property can be found. For example: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

水染的天色ゝ 2024-07-15 13:46:56

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

You need to add BindingFlags.Public | BindingFlags.Instance

旧故 2024-07-15 13:46:56

谢谢,今天这真的帮了我的忙。 我保存了审核信息,但属性名称的大小写不正确。 (审核内置于数据层中。)无论如何,我必须添加 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 的类的一部分。

Thanks, this really helped me out in a pinch today. I had audit information saved, but with incorrect casing on the property names. (The auditing is built into a datalayer.) Anyway so I had to add IgnoreCase as a binding flag, but then it still didn't work, till my coworker found this answer. The resulting function:

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

This is part of a class I call DotMagic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文