【发布时间】:2017-06-16 11:46:54
【问题描述】:
我有一个函数可以反序列化从 Api 获得的任何类型的对象。 如果有错误,我想返回一个 T 类型的新对象。
我尝试使用return new T() 进行操作,但出现错误:
'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);
}
【问题讨论】:
-
@Cody Gray 你没看到吗?他已经使用了类型约束!问题是另一个问题
-
@adjan OP 仅在一处使用类型约束。有错误的行在没有类型约束的方法中。所以它仍然是重复的。
-
@Stijn 但另一个问题在哪里说这是在每种方法中都有它的要求?
-
@adjan 答案中第一个代码块下方的段落解释了这一点。
-
@AndersonPimentel 我知道这一点。我只是看不出重复的答案在哪里解释了这一点。