Jak*_*ote 15 c# generics c#-6.0
我试图在通用接口上获取方法的名称.我希望这可以工作,因为类型部分将是一个有效的类型:
//This does not compile
nameof(IGenericInterface<>.Method)
//This would compile
typeof(IGenericInterface<>)
Run Code Online (Sandbox Code Playgroud)
我认为这应该是有效的C#6或者我错过了什么或者是他们更好的方法来做到这一点.我不想为方法名称使用字符串,就好像方法被重命名代码会破坏而没有任何构建时错误.
das*_*ght 28
这是预料之中的.根据文档,您的表达式是不允许的,因为它引用了一个未绑定的泛型类型:
因为参数需要在语法上是一个表达式,所以有许多不允许列出的东西是无用的.以下值得一提的是产生错误:预定义类型(例如,
int或void),可空类型(Point?),数组类型(Customer[,]),指针类型(Buffer*),限定别名(A::B)和未绑定泛型类型(Dictionary<,>),预处理符号(DEBUG),和标签(loop:).
您可以通过提供通用参数来解决此限制:
nameof(IGenericInterface<object>.Method)
Run Code Online (Sandbox Code Playgroud)
注意:我认为Microsoft应调整nameof功能以允许引用未绑定泛型类型的方法.
只需使用示例类型即可进行编译。
string name = nameof(IGenericInterface<int>.Method) // will be Method
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4626 次 |
| 最近记录: |