温馨提示×

c# nameof如何处理泛型

c#
小樊
82
2024-11-17 02:28:58
栏目: 编程语言

在C#中,nameof关键字用于获取一个类型的名称或一个表达式的名称。然而,nameof不能直接处理泛型类型,因为它需要一个具体的类型或者一个具体的表达式。但是,你可以使用一些技巧来处理泛型类型。

假设你有一个泛型类MyGenericClass<T>,并且你想要获取这个泛型类型的名称。你可以通过创建一个非泛型的包装类来实现这个目标:

public class MyGenericClass<T>
{
    // ...
}

public static class MyGenericClassExtensions
{
    public static string GetGenericTypeName<T>(this T instance)
    {
        return typeof(MyGenericClass<>).GetGenericTypeDefinition().Name;
    }
}

现在,你可以使用GetGenericTypeName方法来获取泛型类型的名称:

var myInstance = new MyGenericClass<int>();
string typeName = myInstance.GetGenericTypeName(); // 输出 "MyGenericClass`1"

请注意,这个方法返回的名称包含了泛型参数的数量和值(例如,MyGenericClass1)。如果你只想要泛型参数的数量,你可以使用以下方法:

public static string GetGenericTypeNameWithoutParameters<T>(this T instance)
{
    return typeof(MyGenericClass<>).GetGenericTypeDefinition().Name.Remove(typeof(MyGenericClass<>).GetGenericTypeDefinition().Name.IndexOf('`'));
}

这个方法将返回不包含泛型参数值的名字(例如,MyGenericClass)。

0