通用方法编译时错误

Stu*_*ler 1 c# generics abstract-class

以下代码:

    private IList<T> DoStuff<T>()
    {
        IList<T> res = new List<T>();
        for (int i = 0; i < 10; i++)
        {
            T item = DoOtherStuff<T>();
            res.Add(item);
        }
        return res;
    }

    private T DoOtherStuff<T>() where T : new()
    {
        return new T();
    }
Run Code Online (Sandbox Code Playgroud)

生成以下错误:

'T'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法'DoOtherStuff()'中将其用作参数'T'

请问有人可以解释一下原因吗?

Meh*_*dad 8

更改

private IList<T> DoStuff<T>()
Run Code Online (Sandbox Code Playgroud)

private IList<T> DoStuff<T>() where T : new()
Run Code Online (Sandbox Code Playgroud)

因为否则你不能保证T有一个new()构造函数.