📅  最后修改于: 2023-12-03 15:29:46.767000             🧑  作者: Mango
在 C# 中,获取类型可以通过 Type
类或者 Type
关键字来实现,而命名空间可以帮助我们组织代码和类型,使代码更加清晰和易读。本文将介绍如何使用命名空间来获取类型。
using System;
namespace MyNamespace
{
class MyClass1 {}
class MyClass2 {}
}
class Program
{
static void Main(string[] args)
{
var myNamespaceTypes = typeof(MyNamespace).GetNestedTypes();
foreach (var type in myNamespaceTypes)
{
Console.WriteLine(type.Name);
}
}
}
上述代码中,我们先定义了一个命名空间 MyNamespace
,并在该命名空间下定义了两个类型 MyClass1
和 MyClass2
。然后通过 typeof(MyNamespace)
方法获取到 MyNamespace
的 Type
对象,再通过 GetNestedTypes()
方法获取到 MyNamespace
中的所有嵌套类型。
最后通过 foreach
循环遍历 myNamespaceTypes
数组,将每个类型的 Name
属性输出到控制台上。
using System;
using System.Linq;
using System.Reflection;
namespace MyNamespace
{
class MyClass1 {}
class MyClass2 {}
}
class Program
{
static void Main(string[] args)
{
var myNamespaceTypes = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.Namespace == "MyNamespace");
foreach (var type in myNamespaceTypes)
{
Console.WriteLine(type.Name);
}
}
}
如果需要获取指定命名空间下的所有类型,可以通过 Assembly
类来实现。首先通过 GetExecutingAssembly()
方法获取当前程序集的 Assembly
对象,然后通过 GetTypes()
方法获取当前程序集中的所有类型。
接着通过 Where()
方法筛选出指定命名空间下的所有类型,在 foreach
循环中输出每个类型的 Name
属性。
using System;
using System.Reflection;
namespace MyNamespace
{
class MyClass1 {}
class MyClass2 {}
}
class Program
{
static void Main(string[] args)
{
var myNamespaceType = Type.GetType("MyNamespace.MyClass1");
Console.WriteLine(myNamespaceType.Name);
}
}
如果需要根据名称获取指定命名空间下的某个类型,可以使用 Type.GetType()
方法。该方法的参数为类型的全名,包括命名空间和类型名。
上述代码中,我们通过 Type.GetType()
方法获取了 MyNamespace
命名空间下的 MyClass1
类型,并将其 Name
属性输出到控制台上。
通过使用命名空间,我们可以帮助组织代码和类型,使代码更加清晰和易读。同时,使用上述方法可以很方便地获取命名空间中的所有类型,以及根据名称获取指定类型。