我在.net核心中創建了一個web應用程序,我試圖創建一個通用的方式來設置並從Session獲取「對象」。設置和獲取我可以做的部分,我唯一的問題是,如果對象不存在,我想要初始化該對象。我得到的錯誤是'T'必須是一個帶有公共無參數構造函數的非抽象類型,才能在通用類型或方法'SessionExtensions.CreateObject()'中使用它作爲參數'T'有人可以幫助我嗎? 感謝提前:) PS:這裏是我的代碼:在.Net Core中創建對象類型T
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? CreateObject<T>() :
JsonConvert.DeserializeObject<T>(value);
}
public static T CreateObject<T>() where T : new()
{
return new T();
}
}
編譯器是相當清楚的,你可以使用一個類型,是一個抽象類,接口或類裏面沒有你的'設置參數的構造函數3210'或'獲取'方法,因爲這些方法不會將'T'限制爲'new()',而'CreateObjects'。你能更清楚你在問什麼? –
嗨,謝謝你的評論,那麼如果你用這種通用的方式來創建對象,你有什麼建議呢? :) –
是否有*特定*的原因,你需要創建一個新的對象,如果它不存在於會話中?那麼在構造函數中帶有參數的複雜類型呢?爲什麼你不能從調用代碼中處理丟失的鍵? –