我有一个捕获AggregateException
的方法。然而,我似乎无法访问添加到继承基本Exception
的异常的内部异常上的属性。
例如:类型Azure.RequestFailedException
包含属性ErrorCode
。使用下面的代码,当处理AggregatedException
时,我无法访问该属性,因为ex
总是Exception
类型。
Console.WriteLine(ex.ErrorCode);
'Exception'不包含'ErrorCode'的定义…
当异常是AggregatedException
的一部分时,如何访问这些属性?
public Response GetBin(string binName)
{
try
{
BlobContainerClient container = this._storage.GetContainer(binName);
Azure.AsyncPageable<BlobItem> blobs = this._storage.GetBlobs(container);
return new GetBinResponse(container, blobs);
}
catch (AggregateException ae)
{
Response exResponse = null;
ae.Handle(ex =>
{
if (ex is Azure.RequestFailedException)
{
Console.WriteLine(ex.ErrorCode);
exResponse = new BinNotFoundExceptionResponse(binName);
return true;
}
else
{
exResponse = new BadRequestResponse(ex.Message);
return true;
}
});
return exResponse;
}
catch (Exception ex)
{
return new BadRequestResponse(ex.Message);
}
}
不能将转换为但只有检查的类型。用这个代替:
if (ex is Azure.RequestFailedException e)
{
Console.WriteLine(e.ErrorCode)
}
或者在c# 7中引入的模式匹配之前:
var e = ex as Azure.RequestFailedException;
if (e != null)
{
Console.WriteLine(e.ErrorCode)
}