2014-02-17 70 views
6

在C#中,可以使用下面的別名類:使用Alias = Class;泛型

using Str = System.String; 

這可能與依賴於泛型類的,我已經嘗試過類似的做法,但它似乎沒有編制。

using IE<T> = System.Collections.Generic.IEnumerable<T>; 

using IE = System.Collections.Generic.IEnumerable; 

是在C#這甚至可能使用泛型?如果是這樣,我錯過了什麼?

+1

也許http://stackoverflow.com/questions/3720222/using-statement-with-generics-using-iset-system-collections-generic-iset能幫忙嗎? – NWard

回答

10

與依賴於泛型類的,我已經嘗試了類似的做法,但它似乎沒有編譯這是可能的。

using IE<T> = System.Collections.Generic.IEnumerable<T>; 

不,這是不可能的。唯一可行的是:

using IE = System.Collections.Generic.IEnumerable<string>; 

A using聲明不能通用。

5

不,這是不可能的。 C# Language Specification,第5版,第9.4.1節中指出:

使用別名可以命名一個封閉構造類型,但不能命名而不提供類型參數的 未綁定的泛型類型聲明。對於 例如:

namespace N1 
{ 
    class A<T> 
    { 
     class B {} 
    } 
} 
namespace N2 
{ 
    using W = N1.A;   // Error, cannot name unbound generic type 
    using X = N1.A.B;   // Error, cannot name unbound generic type 
    using Y = N1.A<int>;  // Ok, can name closed constructed type 
    using Z<T> = N1.A<T>; // Error, using alias cannot have type parameters 
}