如何在Tuple中声明一个在运行时获取Type的类型

时间:2014-07-10 05:38:05

标签: c# generics

请考虑Tuple声明:

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);
}

但是我收到了这个错误:

  

非通用类型&#39; Nime&#39;不能与类型参数一起使用

如何声明类似Tuple的类在运行时获取类型。

感谢

2 个答案:

答案 0 :(得分: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);

输出当然是“foo”。

答案 1 :(得分: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>