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,你没有说你想看到任何这些,所以它找不到任何东西.
GetProperty(string name) 搜索具有指定名称的公共属性(根据MSDN),但使用指定的绑定约束完全按照您的指定搜索指定的属性.GetProperty(string, BindingFlags)
当你说BindingFlags.IgnoreCase,它只是应用它BindingFlag,没有别的.根据该文件,则必须指定BindingFlags.Instance或BindingFlags.Static为了获得回报.