c# nameof如何处理泛型

c#
1513
2024/11/17 3:32:14
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在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)。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 如何用C#调用Openseadragon的API