假設我們有一個嵌套的泛型類:.Net是否支持curried仿製藥?
public class A<T> {
public class B<U> { }
}
這裏,typeof(A<int>.B<>)
在本質上是與只有第一綁定兩個參數的通用類。
如果我有一個類有兩個參數
public class AB<T, U> { }
有沒有辦法來指代「AB
與T=int
和U
保持開放」?如果不是,這是C#限制還是CLR限制?
假設我們有一個嵌套的泛型類:.Net是否支持curried仿製藥?
public class A<T> {
public class B<U> { }
}
這裏,typeof(A<int>.B<>)
在本質上是與只有第一綁定兩個參數的通用類。
如果我有一個類有兩個參數
public class AB<T, U> { }
有沒有辦法來指代「AB
與T=int
和U
保持開放」?如果不是,這是C#限制還是CLR限制?
顯然它不能在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
兩種類型的封閉類型是A<>
(開放式泛型類型)
編輯:進一步的測試顯示,typeof(A<int>.B<string>)
實際上是一個通用類型的arity 2,不是一個nested通用類型的arity 1 ... typeof(A<int>.B<string>).GetGenericArguments()
返回一個數組與typeof(int)
和typeof(string)
。所以typeof(A<int>.B<>)
實際上相當於(A.B)<int, >
,這是不支持的(通用類型不能部分關閉)
你的觀察是正確的。在封面下,C
@Eric,謝謝您的確認。我希望你會看到這個問題,並對其進行闡述......如果你的想法不合適,這對於一篇博客文章可能是一個很好的主題;) – 2011-04-09 01:29:57
當然,你是對的。我的錯誤是假設'typeof(A
這可以用F#中的類型完成嗎? – GregC 2011-04-08 23:45:40
如果你問我,我不知道......我從來沒有真正使用F#的任何時間長度。 – configurator 2011-04-08 23:47:23
「咖喱」,你的意思是「部分關閉」? – Gabe 2011-04-09 01:15:50