如何声明一个在tuntime中获得type的类型,比如Tuple

本文关键字:type 类型 比如 Tuple 声明 何声明 一个 tuntime | 更新日期: 2023-09-27 18:12:11

请考虑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);
}

但是我得到了这个错误:

非泛型类型'Nime'不能与类型参数一起使用

如何声明像Tuple这样的类在运行时获得类型

谢谢

如何声明一个在tuntime中获得type的类型,比如Tuple

我想我知道你想模仿什么

您需要以下内容:

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

注:NimeNime<T>是不同的类型。前者是'factory'类。

用法:

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

可以这样做:

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"