GetProperty BindingFlags.IgnoreCase在c#中没有public和Instance工作

Shr*_*abh 11 c# reflection

 Type t = typeof(T);
  t.GetProperty("Company")
Run Code Online (Sandbox Code Playgroud)

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

    Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)

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

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase|BindingFlags.Public | BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 20

其过载采取BindingFlags有效的默认BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance.这就是为什么它会在你的第一个片段中找到它.

如果你做的指定BindingFlags,你必须指定所有相关的标志-其中包括标志说你是否希望看到公共成员,你是否希望看到非公共成员,无论你想看到实例成员,以及是否要看静态成员.

当你刚才指定时BindingFlags.IgnoreCase,你没有说你想看到任何这些,所以它找不到任何东西.


Ale*_*kov 7

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

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


Moh*_*han 5

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

当你说BindingFlags.IgnoreCase,它只是应用它BindingFlag,没有别的.根据该文件,则必须指定BindingFlags.InstanceBindingFlags.Static为了获得回报.