[英]C# - Get namespace function belongs to?
類似的,如果我輸入字符串“ Console.WriteLine”,它將返回->“ System.Console.WriteLine”
我認為通過反射有某種方法。
好吧,這個問題比您想象的要難一些。
首先,掃描所有已加載程序集中的所有類型非常簡單。 因此,例如,要完全找到所需的內容,可以執行以下操作:
void Main()
{
String input = "Console.WriteLine";
var fullNames =
(from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetTypes()
from member in type.GetMembers()
let memberWithName = type.Name + "." + member.Name
where memberWithName == input
select type.FullName + "." + member.Name).Distinct();
fullNames.Dump();
}
注意,上面的代碼是通過LINQPad運行的,而LINQ查詢正是您要尋找的。
但是,有一個小問題。
如果尚未加載程序集怎么辦? 那您將找不到。 另外,在上面的查詢中,調用Distinct
的目的是控制台有許多重載。 當然,為您的目的,這些名稱都將產生相同的名稱,因此調用了Distinct
。
另外,請注意,如果我使用WriteLine
方法創建自己的名為Console
的類,則上面的代碼也將發現,也沒有辦法區分兩者。
當您的代碼中有這樣的場景(即多個類)時,文件頂部的using
指令指示將找到哪個。 使用此代碼,就沒有這種事情了,因此您需要自己為此編寫任何規則。
現在,一個更好的問題(從我到您)是您打算將此代碼用於什么。 如果您告訴我們最終目的是什么,也許會有更好的方法來幫助您。
Google的名字 ; 您通常會找到MSDN文檔,該文檔為您提供了名稱空間。
使用反射,您將需要遍歷每個程序集中每個名稱空間中的每個類以查找匹配項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.