C# 泛型T-创建新实例

C# 泛型T-创建新实例,c#,generics,C#,Generics,我有一个函数来反序列化从Api获得的任何类型的对象。 如果有错误,我想返回一个T类型的新对象 我尝试使用return new T()执行此操作,但出现错误: “T”必须是具有公共无参数的非抽象类型 构造函数,以便将其用作泛型类型或 方法 我的代码怎么了 [SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")] internal static T DeserializeO

我有一个函数来反序列化从Api获得的任何类型的对象。 如果有错误,我想返回一个T类型的新对象

我尝试使用
return new T()
执行此操作,但出现错误:

“T”必须是具有公共无参数的非抽象类型 构造函数,以便将其用作泛型类型或 方法

我的代码怎么了

[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
        internal static T DeserializeObject<T>(this JsonSerializer serializer, string value) 
        {
            try
            {
                using (var stringReader = new StringReader(value))
                {
                    using (var jsonTextReader = new JsonTextReader(stringReader))
                    {
                        return (T)serializer.Deserialize(jsonTextReader, typeof(T));
                    }
                }
            }

            catch {

                return GetDefault<T>(); //This line returns the error
            }  
        }


        public static T GetDefault<T>() where T : new()
        {
            if (typeof(IEnumerable).IsAssignableFrom(typeof(T)))
            {
                return new T();
            }
            return default(T);
        }
[SuppressMessage(“Microsoft.Usage”,“CA2202:不要多次处理对象”)]
内部静态T反序列化对象(此JsonSerializer序列化程序,字符串值)
{
尝试
{
使用(var stringReader=新的stringReader(值))
{
使用(var jsonTextReader=newjsontextreader(stringReader))
{
返回(T)序列化程序。反序列化(jsonTextReader,typeof(T));
}
}
}
抓住{
return GetDefault();//此行返回错误
}  
}
公共静态T GetDefault(),其中T:new()
{
if(typeof(IEnumerable).IsAssignableFrom(typeof(T)))
{
返回新的T();
}
返回默认值(T);
}

在您正在调用的
反序列化对象中

GetDefault<T>()

在您正在调用的
反序列化对象中

GetDefault<T>()


@科迪·格雷,你没看见吗?他已经使用了类型约束!问题是不同的one@adjanOP仅在一个位置使用类型约束。有错误的行在没有类型约束的方法中。所以它仍然是重复的。@Stijn但另一个问题在哪里说这是每个方法都需要的?@adjan答案中第一个代码块下面的段落解释了这一点。@AndersonPimentel我知道这一点。我只是不明白重复的答案是怎么解释的。@Cody Gray,你没看到吗?他已经使用了类型约束!问题是不同的one@adjanOP仅在一个位置使用类型约束。有错误的行在没有类型约束的方法中。所以它仍然是重复的。@Stijn但另一个问题在哪里说这是每个方法都需要的?@adjan答案中第一个代码块下面的段落解释了这一点。@AndersonPimentel我知道这一点。我只是不明白重复的答案是怎么解释的。非常感谢,谢谢worked@adjan我承认我是在Visual Studio关闭的情况下回答的。=)刚刚删除了评论。@Rahul我看到了,现在我明白了。刚刚删除了评论。@adjan,感谢您对答案的编辑。Thanks@adjan,说得有道理,而且我很确定他们没有真正理解这个问题,可能非常感谢你,是吗worked@adjan我承认我是在Visual Studio关闭的情况下回答的。=)刚刚删除了评论。@Rahul我看到了,现在我明白了。刚刚删除了评论。@adjan,感谢您对答案的编辑。Thanks@adjan,这是有道理的,而且我很确定他们可能没有真正理解这个问题