我有一个这种类:
class A<TResult>
{
public TResult foo();
}
Run Code Online (Sandbox Code Playgroud)
但有时我需要将此类用作非泛型类,即类型TResult为void.
我无法通过以下方式实例化该类:
var a = new A<void>();
Run Code Online (Sandbox Code Playgroud)
另外,我宁愿不指定省略尖括号的类型:
var a = new A();
Run Code Online (Sandbox Code Playgroud)
我不想重写全班,因为它做同样的事情.
该void不是在C#中一个真正的类型,即使有相应System.Void的FCL结构.我担心你需要这样的非通用版本:
class A
{
//non generic implementation
}
class A<T> : A
{
//generic implementation
}
Run Code Online (Sandbox Code Playgroud)
你可以在FCL中看到System.Action/ System.Action<T>,而不是System.Action<void>,Task而不是Task<void>.
从CLI规范编辑(ECMA-335):
以下类型的类型不能用作实例化(泛型类型或方法)中的参数:
Byref类型(例如,System.Generic.Collection.List`1 <string&>无效)
包含可指向CIL评估堆栈的字段的值类型(例如,List <System.RuntimeArgumentHandle>)
void(例如,List <System.Void>无效)
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |