如何从泛型函数返回null?

kat*_*tit 4 .net c# 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;
    }
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了它抱怨return null;部分

无法将表达式类型'null'转换为'T'类型

如何从这样的函数返回null?

Ode*_*ded 7

您可以添加T作为类的泛型约束(因为结构是值类型而不能是null).

private T DeserializeStream<T>(Stream data) where T : class, IExtensible
Run Code Online (Sandbox Code Playgroud)

作为@mindandmedia 评论,另一种是返回defaultT -这将使其价值工种(这样的Nullable<T>,int32等...).