【问题标题】:Is it possible to access the type generic T without parameters (C#)? [duplicate]是否可以在没有参数的情况下访问泛型 T 类型(C#)? [复制]
【发布时间】:2023-03-28 21:53:01
【问题描述】:

在这个例子中,一个扩展方法使用类型的名称从字典中返回一个使用泛型 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

【问题讨论】:

  • 该类型由typeof 而非nameof 返回。 nameof 返回它所指向的事物的名称。在这种情况下,参数名称
  • 我还有一个问题,如果你真的有一本字典,你为什么把它用作列表/数组?你应该可以把你的代码写成var z = dictionary[y];,不是吗?

标签: c# .net


【解决方案1】:

听起来你应该使用

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

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

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

改为。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多