如何在通用函数中返回 null?

5

I have function like this:

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?


6
你可以像这个帖子中所回答的那样返回default(T):https://dev59.com/BXVC5IYBdhLWcg3wbQbA?rq=1 - mindandmedia
1个回答

7
您可以添加一个通用约束,即 T 是一个类(因为结构体是值类型,不能为 null)。
private T DeserializeStream<T>(Stream data) where T : class, IExtensible

正如@mindandmedia所评论的那样,另一种选择是返回Tdefault值——这将使其适用于值类型(如Nullable<T>int32等)。


我把这个作为答案提交了,但它被转换成了评论... - mindandmedia
@mindandmedia - 你没有提到泛型约束。你只放了一个句子和一个链接,结果被转换成了评论。如果你多写一点内容,它就会保持为答案。我只是指出似乎发生了什么。 - Oded
@Oded,顺序是类(class),IExtensible。 - HatSoft
没关系,我仍然可以从评论中获得甜蜜的“卡尔玛”(?)... :) - mindandmedia
@Oded 这是应该的写法,其中 T : class, IExtensible,类名应该放在前面。 - HatSoft
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接