簡體   English   中英

GetProperty BindingFlags.IgnoreCase在沒有public和Instance的情況下無法工作

[英]GetProperty BindingFlags.IgnoreCase wont work without public and Instance in c#

 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)

BindingFlags的重載有效默認為BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance 這就是為什么它會在你的第一個片段中找到它。

如果確實指定了BindingFlags ,則必須指定所有相關標志 - 其中包括標志,表示您是否要查看公共成員,是否要查看非公共成員,是否要查看實例成員以及是否想看靜態成員。

當你剛剛指定BindingFlags.IgnoreCase ,你沒有說你想看到任何這些,所以它找不到任何東西。

按設計, Type.GetProperty要求您至少指定靜態或實例:

•您必須指定BindingFlags.Instance或BindingFlags.Static才能獲得返回。

GetProperty(string name) 搜索具有指定名稱的公共屬性 (根據MSDN ),但GetProperty(string, BindingFlags) 使用指定的綁定約束完全按照您的指定搜索指定的屬性

當你說BindingFlags.IgnoreCase ,它只是應用了BindingFlag ,而沒有別的。 根據文檔 ,您必須指定BindingFlags.InstanceBindingFlags.Static才能獲得返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM