泛型类型的名称
本文关键字:泛型类型 | 更新日期: 2023-09-27 18:17:53
我试图在通用接口上获得方法的名称。我希望它能工作,因为类型部分将是一个有效的typeof:
//This does not compile
nameof(IGenericInterface<>.Method)
//This would compile
typeof(IGenericInterface<>)
我认为这应该是有效的c#-6.0
,或者我错过了什么,或者有更好的方法来做到这一点。我不想使用字符串作为方法名,因为如果方法被重命名,代码将在没有任何构建时错误的情况下中断。
这是预期的。根据文档,表达式是不允许的,因为它引用了一个未绑定的泛型类型:
因为实参在语法上需要是表达式,所以有许多东西是不允许的,它们对列出没有用处。以下是值得一提的产生错误的类型:预定义类型(例如,
int
或void
),可空类型(Point?
),数组类型(Customer[,]
),指针类型(Buffer*
),限定别名(A::B
),未绑定泛型类型(Dictionary<,>
),预处理符号(DEBUG
)和标签(loop:
)。
您可以通过提供泛型形参来解决此限制:
nameof(IGenericInterface<object>.Method)
注意:我认为微软应该调整nameof
功能,以允许引用未绑定泛型类型的方法
为了编译,只使用一个示例类型。
string name = nameof(IGenericInterface<int>.Method) // will be Method