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

如果我编写下面的代码,它将给出 null

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

与此同时,如果我写这个工作正常。为什么会这样?

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase|BindingFlags.Public | BindingFlags.Instance)
4

3 回答 3

24

没有有效的重载BindingFlags默认为BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance. 这就是它在您的第一个片段中找到它的原因。

如果您确实指定 a BindingFlags,则必须指定所有相关标志 - 其中包括表示您是否要查看公共成员、是否要查看非公共成员、是否要查看实例成员以及是否要查看的标志查看静态成员。

当您指定BindingFlags.IgnoreCase时,您还没有说要查看其中任何一个,因此它不会找到任何东西。

于 2013-02-18T06:59:05.120 回答
7

根据设计, Type.GetProperty要求您至少指定静态或实例:

•您必须指定 BindingFlags.Instance 或 BindingFlags.Static 才能获得回报。

于 2013-02-18T06:59:06.800 回答
5

GetProperty(string name) 搜索具有指定名称的公共属性(根据MSDN),但搜索指定的属性,完全按照您指定的方式使用指定的绑定约束。GetProperty(string, BindingFlags)

当您说BindingFlags.IgnoreCase时,它仅适用于 ,仅此BindingFlag而已。根据docs,您必须指定BindingFlags.InstanceorBindingFlags.Static才能获得回报。

于 2013-02-18T07:02:02.913 回答