繁体   English   中英

通用列表c#

[英]Generic Lists c#

在c#中可以满足以下要求吗?

我有以下但最后一行不会编译,我错过了什么?

public static void BuildGeneric<T>(List<T> l)
{
    l = new List<T>();
    var anything = new object();
    l.Add(anything);
}

'System.Collections.Generic.List.Add(T)'的最佳重载方法匹配有一些无效的参数

public static void BuildGeneric<T>(List<T> l)
{
    l = new List<T>();
    var anything = new object();
    l.Add(anything);
}

应该是这个

public static void BuildGeneric<T>(out List<T> l)
{
    l = new List<T>();
    var anything = default(T);
    l.Add(anything);
}

现在你可以做到

BuildGeneric<object>(out l);

由于下面有关于default关键字的讨论(评论),我想我应该包含一个链接:

http://msdn.microsoft.com/en-us/library/xwth0h0d(VS.80).aspx

没有。

l 只能保存T类型的对象。
您的代码试图破坏泛型的整个目的。

如果您将anything更改为T类型,它将起作用。
如果将它InvalidCastExceptionT ,它将进行编译,但会在运行时抛出InvalidCastException ,除非它实际上是T

你想做什么?

您需要以这种方式修改您的功能:

public static void BuildGeneric<T>(ref List<T> l)
    where T : new()
{
    l = new List<T>();
    T anything = new T();
    l.Add(anything);
}

对我来说,这听起来像是要创建一个包含任何类型项目的列表。 正确? 正如已经指出的那样 - 这是不可能完成的。

对此的适当方法是为集合中所需的对象类型创建公共接口。 让集合中所需的所有类都实现此接口,然后您可以拥有一个包含实现此接口的元素的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM