gpt4 book ai didi

C# - 获取命名空间函数属于什么?

转载 作者:行者123 更新时间:2023-12-04 16:50:59 26 4
gpt4 key购买 nike

类似的东西,如果我输入字符串“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 .

另外,请注意,如果我创建自己的类,名为 ConsoleWriteLine方法,上面的代码也会发现,两者没有办法区分。

当您的代码中有这样的场景(即多个类)时, using文件顶部的指令指示将找到哪一个。使用此代码,没有这样的事情,因此您需要自己编写任何规则。

现在,一个更好的问题(从我到您)是您打算使用此代码的目的。如果您告诉我们最终目的是什么,也许有更好的方法可以帮助您。

关于C# - 获取命名空间函数属于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com