C# - 获取命名空间函数所属?

标签 c# .net 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();
}

注意,上面的代码是为了运行LINQPad而编写的,LINQ 查询就是您要查找的内容。

但是,有一个小问题。

如果程序集尚未加载怎么办?到时候你就找不到了。此外,在上面的查询中,调用 Distinct 背后的目的是 Console 有许多重载。当然,出于您的目的,这些都会产生相同的名称,因此调用 Distinct

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

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

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

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

相关文章:

c# - LINQ 使用 DTO 将 SQL Server 日期时间转换为字符串

c# - Visual Studio 智能感知列表为空

c# - 向日期添加分钟不会更改日期 C# .NET

.net - 是否可以使用 WCF 服务而不是 WCF 数据服务来实现服务器端分页

c# - 如何从字节数组(在内存中)运行方法?

c# - Entity Framework 不会检测导航属性的更改

.net - Web 检查中的弱 SSL 协议(protocol) TLS v1.0

.net - .NET 中奇怪的数组内存管理

java - 如何在 Java 代码中使用 Scala 注解

c - 非动态加载代码的类似 dlsym 的功能?