c# - 是否可以在没有参数的情况下访问泛型 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
。
解决方案
听起来你应该使用
var y = typeof(T).Name; // y is "SomeClass"
或者,如果你也想要命名空间,
var y = typeof(T).FullName; // y is "Namespace.For.SomeClass"
反而。
nameof
正如您所发现的,将返回类型参数的名称(即"T"
),而不是调用泛型方法的类型的名称(即"SomeClass"
)。
推荐阅读
- node.js - 构建.exe后电子托盘和自动启动功能不起作用
- python - 将 Python 脚本中设置的 ENV 变量持久保存到调用 shell 中
- c# - asp.net core 中的文档总数
- python - 在python中删除包含字符串的段落
- c# - 动态更改选择表达式
- sql - 查询以显示员工和经理
- php - Dokan 自定义产品字段
- spring-data-jpa - 使用 JPQL/EntitGraph 加载子实体不适用于 EclipseLink 和 spring 数据
- javascript - querySelector 在对象内部无法访问
- spartacus-storefront - 如何使用 Spartacus 中的插座覆盖/扩展 ProductGridItemComponent?