如何从泛型函数返回 null? [复制]
Posted
技术标签:
【中文标题】如何从泛型函数返回 null? [复制]【英文标题】:How do I return null from generic function? [duplicate] 【发布时间】:2012-07-21 20:56:35 【问题描述】:我有这样的功能:
private T DeserializeStream<T>(Stream data) where T : IExtensible
try
var returnObject = Serializer.Deserialize<T>(data);
return returnObject;
catch (Exception ex)
this.LoggerService.Log(this.AccountId, ex);
return null;
一切都很好,除了抱怨return null;
部分
无法将表达式类型“null”转换为类型“T”
如何从这样的函数返回 null?
【问题讨论】:
您可以回复default(T)
,正如这篇文章中的回答:***.com/questions/302096/…
【参考方案1】:
您可以添加T
是一个类的通用约束(因为结构是值类型,不能是null
)。
private T DeserializeStream<T>(Stream data) where T : class, IExtensible
作为@mindandmediacommented,另一种方法是返回default
of T
- 这将允许它处理值类型(例如Nullable<T>
、int32
等...)。
【讨论】:
我把它作为答案,它被转换为评论...... @mindandmedia - 你没有提到通用约束。你放了一个句子和一个链接——它被转换为评论。如果你多加一点,它就会作为一个答案。只是指出似乎发生了什么。 @Oded 顺序是类,IExtensible 没关系,我仍然从评论中得到甜蜜的业力(?)... :) @CodesInChaos - 可能是自动转换的。有一些不涉及任何模式的启发式方法。以上是关于如何从泛型函数返回 null? [复制]的主要内容,如果未能解决你的问题,请参考以下文章