类似的东西,如果我输入字符串“Console.WriteLine”,它将返回 - > “的System.Console.WriteLine”
我认为通过反思有一些方法。
答案 0 :(得分:5)
嗯,这个问题比你想象的要困难一些。
首先,扫描所有已加载程序集中的所有类型非常简单。例如,要找到您正在寻找的内容,请执行以下操作:
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
。
另外,请注意,如果我使用Console
方法创建自己的名为WriteLine
的类,上面的代码也会发现,也无法区分这两者。
当你的代码中有这样的场景(即多个类)时,文件顶部的using
指令指示将找到哪一个。有了这段代码,就没有这样的东西了,所以你需要为自己编写任何规则。
现在,一个更好的问题(从我到你)是你打算使用这个代码的。如果您告诉我们最终目的是什么,也许有更好的方法来帮助您。
答案 1 :(得分:0)
Google the name;您通常会找到MSDN文档,它为您提供命名空间。
使用反射,您需要遍历每个程序集中每个名称空间中寻找匹配项的每个类。