【问题标题】:Generic type to declare a list [duplicate]声明列表的通用类型[重复]
【发布时间】:2014-03-04 19:57:48
【问题描述】:

您好,我想知道是否可以做类似的事情。

int myInt = 0;
Type myType = myInt.GetType();
List<myType> lst = new List<myType>();

我在这里知道变量 myType 旧类型 int 但我想知道在我不知道 myInt 类型的上下文中是否有任何方法可以做类似的事情

这让我问自己为什么这是无效的。我知道这很愚蠢,但为什么它无效?

List&lt;typeof(int)&gt; myList = new List&lt;typeof(int)&gt;();

所以我想在这里排队做点什么。有什么方法可以归档类似的东西吗?

【问题讨论】:

  • 您可以使用 Reflexion 来做到这一点。看看这里:stackoverflow.com/questions/232535/…
  • 一旦您创建了该列表,您就无法真正使用它。您可以将它放入哪个变量中,以允许您使用它的任何依赖于泛型参数的方法?这是可能,但很少有用

标签: c# generics


【解决方案1】:

是的,这是可能的,但您必须为其添加一些反射。

void Main()
{
    int myInt = 0;
    Type myType = myInt.GetType();

    var listType = typeof(List<>).MakeGenericType(new Type[]{myType});
    var list = Activator.CreateInstance(listType); 
}

【讨论】:

  • 这是可能的,但也相当无用,因为list 静态类型为object。要实际使用它,需要反射或dynamic
  • 我肯定同意这个用例是有限的,但我不知道提问者的用例看起来如何。
  • 最后我放弃了让我的东西通用的尝试,因为在当前上下文中我只需要处理 Guid 但是因为这个编译它有点回答我的问题。
猜你喜欢
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多