2014-07-10 45 views
0

請考慮Tuple聲明:如何聲明一個類型,得到一個類型的tuntime像元組

public static class Tuple 
{ 
    public static Tuple<T1> Create<T1>(T1 item1); 
    public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2); 
    public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3); 
    .... 

我們可以聲明Tuple變量是這樣的:

Tuple<Mycls> a = new Tuple<Mycls>(new Mycls()); 

現在我要聲明我類型如Tuple,可以在運行時獲得類型(類)。我寫道:

public static class Nime 
{ 
    public static Nime<T1> Create<T1>(T1 item1); 
} 

但我得到這個錯誤:

The non-generic type 'Nime' cannot be used with type arguments

如何我可以聲明一個類像Tuple是獲得運行時類型。

感謝

回答

2

我想我知道你,你是試圖仿效

你想要的東西如下:

class Nime<T> { ... } 

static class Nime 
{ 
    public static Nime<T> Create<T>(T t) { return new Nime<T> { ... } } 
} 

注:NimeNime<T>是不同的類型。前者是「工廠」班。

用法:

var n = Nime.Create("foo"); // var is Nime<string> 
2

像這樣的工作:

public class Nime<T1> 
{ 
    public static Nime<T1> Create(T1 item1) 
    { 
     return new Nime<T1>(item1); 
    } 

    public T1 Item { get; set; } 

    private Nime(T1 item) 
    { 
     Item = item; 
    } 
} 

然後,您可以使用它像這樣:

var n = Nime<string>.Create("foo"); 
Console.WriteLine(n.Item); 

當然,輸出是 「富」。

相關問題