具有generics类型的名称

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

//This does not compile nameof(IGenericInterface.Method) //This would compile typeof(IGenericInterface) 

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

这是预料之中的。 根据文档 ,您的表达式是不允许的,因为它引用了未绑定的generics类型:

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

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

 nameof(IGenericInterface.Method) 

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

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

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