簡體   English   中英

C#-獲取名稱空間功能屬於什么?

[英]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.

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