如何从泛型函数返回null?

时间:2012-07-21 20:56:36

标签: c# .net generics

我的功能如下:

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?

1 个答案:

答案 0 :(得分:7)

您可以添加T是一个类的通用约束(因为结构是值类型,不能是null)。

private T DeserializeStream<T>(Stream data) where T : class, IExtensible

作为@mindandmedia commented,另一种方法是返回default of T - 这将允许它处理值类型(例如Nullable<T>int32等等...)。