我需要执行类似下面的代码的操作,但是 new T() 不起作用。它说
“无法创建变量类型 T 的实例,因为它没有 new() 约束。”
public static T MapToBaseDropDown2<T>(this GenericDropDownData dd) where T : BaseDropDown
{
return new T() //FAILS
{
Id = dd.Id,
Description = dd.Description
};
}
BaseDropDown 是 3 个子级的基类,这些子级是使用 EntityFramework 映射的实体(代码优先),因此最好保持尽可能简单。
现在,由于我尝试过的一些实现,它并不是抽象的,但如果可能的话,它会是抽象的。
public class BaseDropDown
{
public int Id { get; set; }
public string Description { get; set; }
}
Calling new T()
假设每种类型has无参数构造函数,这里似乎不是这种情况。即使你的基础阶级BaseDropDown
有这样一个构造函数,不能保证其所有子类,特别是抽象子类:
class BaseDropDown
{
public BaseDropDown() { /* see parameterless-constructor exists */ }
}
abstract class MyClass : BaseDropDown
{
public MyClass() { ... }
}
现在您可以使用new
-限制为exclude抽象类:
public static T MapToBaseDropDown2<T>(this GenericDropDownData dd) where T : BaseDropDown, new()
该约束将仅允许继承的类BaseDropDown
and可以使用无参数构造函数实例化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)