You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查看任意C#命名空间中的所有类和方法?以NuGet API为例

如何查看C#命名空间下的所有类和方法

嘿,这个需求太实用了!不管是刚引入新的NuGet包,还是想探索某个系统命名空间的内容,我来给你分享几种靠谱的方法:

一、用IDE直接查看(最省心)

不管你用Visual Studio还是JetBrains Rider,都有现成的可视化工具,完全不用写代码:

  • 转到定义法:在代码里找到你引用的命名空间(比如using Newtonsoft.Json;),右键点击命名空间名称,选择「转到定义」(VS里是Go to Definition,Rider里是Go to Declaration),IDE会直接打开一个视图,展示这个命名空间下所有的公共类、接口、枚举等成员。点击每个类,还能看到它的所有方法、属性、字段。

  • 类视图/对象浏览器

    • 在VS里,点击顶部菜单「视图」→「类视图」(Class View),然后在左侧树状结构里找到目标命名空间,展开就能看到所有类,再展开类就能看到成员。
    • 或者用「对象浏览器」(View → Object Browser),这里可以筛选特定的程序集,找到你要的命名空间,结构更清晰,还能看到成员的访问修饰符和签名。
  • 智能提示快速预览:在代码里输入命名空间名称,然后打个.,IDE的智能提示会自动列出该命名空间下所有可访问的类和类型。选中某个类后再打.,就能看到它的所有方法、属性了——这个方法在写代码的时候随手用特别方便。

二、用C#反射代码获取(适合自动化/脚本场景)

如果需要批量获取或者不想依赖IDE,可以写一段简单的反射代码来遍历命名空间下的所有类和方法:

using System;
using System.Reflection;
using System.Linq;

namespace NamespaceInspector
{
    class Program
    {
        static void Main(string[] args)
        {
            // 替换成你要查询的目标命名空间
            string targetNamespace = "Newtonsoft.Json";
            
            // 方式1:通过该命名空间下的某个已知类型获取程序集
            Assembly targetAssembly = typeof(Newtonsoft.Json.JsonConvert).Assembly;
            
            // 方式2:直接通过程序集名称加载(需要知道准确的程序集名)
            // Assembly targetAssembly = Assembly.Load("Newtonsoft.Json");

            // 筛选出命名空间下的所有公共类型(排除嵌套类的话可以加!t.IsNested)
            var relevantTypes = targetAssembly.GetTypes()
                .Where(t => t.Namespace == targetNamespace && t.IsPublic)
                .OrderBy(t => t.Name);

            foreach (var type in relevantTypes)
            {
                Console.WriteLine($"📦 类/接口: {type.Name}");
                
                // 获取所有公共实例方法和静态方法(可根据需求调整BindingFlags)
                var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static)
                    .OrderBy(m => m.Name);

                foreach (var method in methods)
                {
                    // 格式化方法参数,方便查看
                    var paramList = string.Join(", ", method.GetParameters()
                        .Select(p => $"{p.ParameterType.Name} {p.Name}"));
                    Console.WriteLine($"  🛠️ 方法: {method.Name}({paramList})");
                }
                Console.WriteLine();
            }
        }
    }
}

代码说明:

  • 替换targetNamespace为你要查看的命名空间即可;
  • 如果不知道程序集里的具体类型,用Assembly.Load("程序集名称")加载,但要确保程序集已经被引用;
  • 可以通过调整BindingFlags来筛选不同访问级别(比如私有方法)、成员类型(比如只看静态方法)。

三、用工具反编译查看(底层视角)

如果你想看到更底层的结构,或者没有IDE的情况下,可以用反编译工具:

  • ILDASM:Windows系统自带的工具,打开命令提示符输入ildasm,然后把NuGet包对应的dll文件(一般在项目的packages文件夹或者bin/Debug目录里)拖拽到窗口里,就能看到完整的命名空间、类、方法的IL结构,展开节点就能查看所有成员。
  • dnSpy:第三方开源的.NET反编译工具,功能更强大,不仅能查看类和方法,还能编辑IL代码,适合深入研究。

内容的提问来源于stack exchange,提问作者Ra1000

火山引擎 最新活动