类似的,如果我输入字符串“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
背后的目的是 Console 有许多重载。当然,出于您的目的,这些都会产生相同的名称,因此调用 Distinct
。
另外,请注意,如果我使用 WriteLine
方法创建名为 Console
的自己的类,上面的代码也会发现,没有办法区分两个。
当您的代码中存在此类场景(即多个类)时,文件顶部的 using
指令将指示将找到哪个类。对于此代码,不存在这样的事情,因此您需要自己编写任何规则。
现在,一个更好的问题(由我向您提出)是您打算使用此代码做什么。如果您告诉我们最终目的是什么,也许有更好的方法可以帮助您。
关于C# - 获取命名空间函数所属?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008553/