我在.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'。你能更清楚你在问什么? –
嗨,谢谢你的评论,那么如果你用这种通用的方式来创建对象,你有什么建议呢? :) –
是否有*特定*的原因,你需要创建一个新的对象,如果它不存在于会话中?那么在构造函数中带有参数的复杂类型呢?为什么你不能从调用代码中处理丢失的键? –