[英]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
类型,它将起作用。
如果将它InvalidCastException
为T
,它将进行编译,但会在运行时抛出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.