通用列表c#

max*_*axp 2 c# generics list

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

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

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

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

kem*_*002 13

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

应该是这个

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

现在你可以做到

BuildGeneric<object>(out l);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 让我添加(为了提问者的利益),如果T是引用类型,这将创建一个带有null的列表.如果在T上放置泛型约束"new()",则可以使用新的T(),这样可以确保T必须具有默认构造函数.如果T是一个值类型,它无关紧要,因为C#中的结构总是有一个默认的构造函数(你不能定义自己的)`default(SomeReferenceType)`产生null,`default(SomeValueType)`default构造一个值类型,等于`new SomeValueType()` (4认同)

SLa*_*aks 7

没有.

l可以持有类型的对象T.
您的代码试图破坏泛型的整个目的.

如果您更改anything为类型T,它将起作用.
如果你把它强制转换T,它会编译,但会InvalidCastException在运行时抛出,除非它是实际的T.

你想做什么?