抛出异常的两种方法如何区分它们

Two Methods That Throws Exceptions How To Differentiate between them

我有一个 try catch 块,它包含两个可以抛出 ArgumentException 的方法。

我想区分异常,以便我可以 return 为用户提供更好的错误消息。 最好的方法是什么? (我想避免用两个单独的 try catch 块包围它)。

try
{
    var store = storeFactory.Create(id); // Can Throw ArgumentException
    var order = await store.GetOrderAsync(orderId); //Can Throw ArgumentException

    return Ok(order);
}
catch (ArgumentException ex)
{
    //TODO: How To Tell Which Methods Throw The Exception (Create Or GetOrderAsync)
    return NotFound("Store Id Was Not Found");
    return NotFound("Order Id Was Not Found");
}

您可以简单地将 try 块分成两个 try 块:

try
{
    var store = storeFactory.Create(id); // Can Throw ArgumentException
    try
    {
       var order = await store.GetOrderAsync(orderId); //Can Throw ArgumentException

       return Ok(order);
    }
    catch ( ArgumentException ex )
    {
       return NotFound("Order Id Was Not Found");
    }
}
catch (ArgumentException ex)
{
    //TODO: How To Tell Which Methods Throw The Exception (Create Or GetOrderAsync)
    return NotFound("Store Id Was Not Found");
}

然而,更好的解决方案是为这两种情况创建一种新的异常类型,例如:

public class OrderNotFoundException : Exception

public class StoreNotFoundException : Exception

然后修改您的方法以抛出这些描述性错误。