Bla*_*lam 2 .net c# reflection namespaces
类似的东西,如果我输入字符串"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();
}
Run Code Online (Sandbox Code Playgroud)
注意,上面的代码是通过LINQPad运行的,LINQ查询还有你要找的东西.
但是,有一个小问题.
如果组件未加载(尚未)怎么办?那你就找不到了.此外,在上面的查询中,调用背后的目的Distinct是Console有许多重载.当然,为了你的目的,那些都会产生相同的名字,因此呼吁Distinct.
另外,请注意,如果我Console使用WriteLine方法创建自己的类,上面的代码也会发现,也没有办法区分这两者.
当你的代码中有这样的场景(即多个类)时,using文件顶部的指令指示将找到哪一个.使用此代码,没有这样的东西,所以你需要自己编写任何规则.
现在,一个更好的问题(从我到你)是你打算使用这个代码.如果您告诉我们最终目的是什么,也许有更好的方法来帮助您.