通用函数和新约束

Ila*_*lan 2 .net c# oop generics interface

当一个继承自IProject而另一个具有new()约束时,如何使用两个参数?以下内容未通过编译"无法创建变量类型'T'的实例,因为它没有new()约束"错误.

public static T CreateNewProject<T, V>(string token, string projectName) where V : IProject<T>, T new()
{
    T project = new T(); 
}
Run Code Online (Sandbox Code Playgroud)

Far*_*yev 5

如果要将约束应用于多个参数,则需要添加第二个where:

where V : IProject<T> 
where T : new()
Run Code Online (Sandbox Code Playgroud)

而且,您需要从方法中返回一些内容:

public static T CreateNewProject<T, V>(string token, string projectName) 
    where V : IProject<T> 
    where T : new()
{
    return new T();
}
Run Code Online (Sandbox Code Playgroud)

PS:对于应用new约束,type参数必须具有公共无参数构造函数.

阅读本文以获取更多信息.