5

我有这样的功能:

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?

4

1 回答 1

7

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

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

正如@mindandmedia 评论的那样,另一种方法是返回defaultofT - 这将允许它处理值类型(例如 aNullable<T>int32)。

于 2012-07-21T20:57:55.160 回答