我需要做財產以後像下面的代碼,但新T()不工作。它說 「因爲它不具有new()約束無法創建變量類型T的實例。」如何使通用方法的返回OBJECT?
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; }
}
谷歌 「新約束」 - 找到答案:https://docs.microsoft.com/en-us/ dotnet/csharp/language-reference/keywords/new-constraint – Chris
什麼是'BaseDropDown'?顯示它如何定義。 – HimBromBeere
這是因爲您的擴展方法可能適用於沒有構造函數的類,非公共構造函數或具有必需參數的構造函數。使用'new()'約束,你可以確定使用你的方法的實例有一個沒有任何參數的公共構造函數。 – 0xaryan