首页 > 解决方案 > 是否可以在没有参数的情况下访问泛型 T 类型(C#)?

问题描述

给定这个例子,一个扩展方法使用类型的名称从字典中返回一个值,它使用泛型 T 的类型。

public static T GetItem<T>(this Dictionary<string, object> dictionary) 
{
    var y = nameof(T);
    var z = dictionary.FirstOrDefault(x => x.Key == y);
    return (T)z.Value;
}

并用作

var item = dictionary.GetItem<SomeClass>();

是否可以nameof(T)在不向该方法提供任何其他参数的情况下获取上述扩展方法?这似乎在运行时返回T而不是预期SomeClass

标签: c#.net

解决方案


听起来你应该使用

var y = typeof(T).Name; // y is "SomeClass"

或者,如果你也想要命名空间,

var y = typeof(T).FullName; // y is "Namespace.For.SomeClass"

反而。

nameof正如您所发现的,将返回类型参数的名称(即"T"),而不是调用泛型方法的类型的名称(即"SomeClass")。


推荐阅读