如何完全处理AggregateException

问题描述 投票:0回答:1

我有以下无法编译的代码,因为编译器对可能未定义returnValue的态度犹豫不决:

private T ReturnData<T>(string url, string method)
{
    T returnValue;

    try
    {
        returnValue = base.ReturnData<T>(url, method); // An http task
    }
    catch (AggregateException ae)
    {
        ae.Handle(inner =>
        {
            // Essentially rethrow any error immediately. Don't even handle just throw.
            return false;
        });

    }

    return returnValue;
}

我试图弄清楚为什么编译器可以将returnValue初始化为未初始化状态。我使用Aggregate Exception Handler错误吗?我知道我只是返回false,基本上是重新抛出错误。为什么此代码无法编译?哪一部分内容未正确处理。

[我注意到我可以在throw部分之后添加ae.Handle(...),但是为什么这会使事情正常进行?

[请取笑我,请稍等片刻,我可以改行

T returnValue; 

进入

T returnValue = default;

并且它将编译。我专注于AggregateException的处理/理解,特别是使用.Handle

initialization try-catch handle aggregateexception
1个回答
0
投票
returnValue如果ReturnData抛出,则可能是不确定的。在这种情况下,您有一个返回ReturnData的代码路径,并且没有将returnValue设置为任何值。并非所有的代码路径都返回类型T的值,因此,编译器将无法编译。您将需要使用try-catch范围之外或final范围内的内容初始化变量returnValue,以确保所有代码路径均返回类型T的值。
© www.soinside.com 2019 - 2024. All rights reserved.