con*_*tor 18 .net c# generics currying
假设我们有一个嵌套的泛型类:
public class A<T> {
public class B<U> { }
}
Run Code Online (Sandbox Code Playgroud)
这里,typeof(A<int>.B<>)本质上是一个具有两个参数的泛型类,其中只有第一个被绑定.
如果我有一个带有两个参数的单个类
public class AB<T, U> { }
Run Code Online (Sandbox Code Playgroud)
有没有办法提到" AB有T=int和U保持开放"?如果不是,这是C#限制还是CLR限制?
Tho*_*que 10
显然它不能在C#中完成,你必须同时指定两个类型参数,或者不指定.
它似乎也不受CLR支持,A<int>.B<>并且A<string>.B<>引用相同的类型:
Type t1 = typeof(A<int>).GetNestedType("B`1");
Type t2 = typeof(A<string>).GetNestedType("B`1");
// t1.Equals(t2) is true
Run Code Online (Sandbox Code Playgroud)
这两种类型的封闭类型是A<>(开放泛型类型)
编辑:进一步的测试表明,typeof(A<int>.B<string>)它实际上是一个通用类型的arity 2,而不是嵌套的泛型类型的arity 1 ... typeof(A<int>.B<string>).GetGenericArguments()返回一个带typeof(int) 和 的数组typeof(string).所以typeof(A<int>.B<>)实际上相当于(A.B)<int, >,不支持(泛型类型不能部分关闭)
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |