当T是列表时default(T)为null
c#
给定以下函数:
public static T GetCachedBoxedValue<T>(string cacheKey, Func<T> getFromExternFunction, bool skipLocalCaches = false)
{
var r = Manager.Get(
cacheKey,
() => new Tuple<T>(
getFromExternFunction()
),
skipLocalCaches
);
if (r == null || r.Item1 == null)
{
return default;
}
return r.Item1;
}
当 T 为 aList<Guid>且r值为 null 时,它返回 null。我将如何修改它以返回一个新的空列表?
回答
您可以将新约束添加到方法并调用new T():
public static T GetCachedBoxedValue<T>(string cacheKey, Func<T> getFromExternFunction, bool skipLocalCaches = false)
where T:new()
{
...
if (r == null || r.Item1 == null)
{
return new T();
}
return r.Item1;
}
该new约束告诉调试只有那些有参数的构造函数可以使用的类型,让您调用它。
将default所有引用类型值null。另一方面,空 List 是完全构造的 List 实例。有关默认值的更多信息,请参阅:https : //docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/default-values