具有泛型类型的名称

时间:2015-10-14 16:03:08

标签: c# generics c#-6.0

我试图在通用接口上获取方法的名称。我希望这可以工作,因为类型部分将是有效的类型:

//This does not compile
nameof(IGenericInterface<>.Method)

//This would compile
typeof(IGenericInterface<>)

我认为这应该是有效的C#6,或者我错过了什么或是他们更好的方法来做到这一点。我不想为方法名称使用字符串,就好像方法被重命名代码会中断而没有任何构建时错误。

2 个答案:

答案 0 :(得分:25)

这是预期的。根据{{​​3}},您的表达式是不允许的,因为它引用了未绑定的泛型类型:

  

因为参数需要在语法上是一个表达式,所以有很多不允许列出的东西。以下值得一提的是产生错误:预定义类型(例如,intvoid),可空类型(Point?),数组类型(Customer[,]),指针类型(Buffer*),限定别名(A::B)和未绑定的泛型类型(Dictionary<,>),预处理符号(DEBUG)和标签(loop:)。

您可以通过提供通用参数来解决此限制:

nameof(IGenericInterface<object>.Method)

注意:我认为Microsoft应调整nameof功能以允许引用未绑定泛型类型的方法。

答案 1 :(得分:2)

只需使用样本类型即可进行编译。

string name = nameof(IGenericInterface<int>.Method) // will be Method