如何从泛型函数返回 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&lt;T&gt;int32 等...)。

【讨论】:

我把它作为答案,它被转换为评论...... @mindandmedia - 你没有提到通用约束。你放了一个句子和一个链接——它被转换为评论。如果你多加一点,它就会作为一个答案。只是指出似乎发生了什么。 @Oded 顺序是类,IExtensible 没关系,我仍然从评论中得到甜蜜的业力(?)... :) @CodesInChaos - 可能是自动转换的。有一些不涉及任何模式的启发式方法。

以上是关于如何从泛型函数返回 null? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从泛型函数中记录参数[重复]

我可以在 C# 中从泛型类型转换为枚举吗?

从泛型类型快速实例化

Scala:从泛型类型到第二泛型类型的隐式转换

java 泛型函数需要返回Integer 我返回null 为啥报空指针异常

如何从泛型类访问静态变量?