传递对象(List <string>)作为Exception的一部分

Pac*_*man 21 c# exception-handling exception

我正在构建一个字符串列表,然后想要抛出一个异常,让UI处理列表并为用户创建错误消息.

有没有办法做到这一点?

Zbi*_*iew 34

例外包含Data属性(这是一个字典).它可用于传递其他信息:

try
{
    // throw new Exception
}
catch(Exception e)
{
    // whatever
    e.Data["SomeData"] = new List<string>();
}
Run Code Online (Sandbox Code Playgroud)

  • +1羞辱我 - 我不知道这个属性 (3认同)
  • 如果您需要在 throw 语句中包含该对象(以防您希望它可能冒出多个级别),您可以执行 `var e = new Exception("some error") { Data = { {"obj1" , obj1}, {"obj2", obj2} } } }` 然后`抛出 e` (2认同)

Zdr*_*nev 31

您可以使用该Exception.Data属性传递任意数据,但更好(更干净)的解决方案是创建自己的自定义异常类派生自Exception并添加您需要的任何属性.

示例代码:

public class MyException: Exception
{
    public List<String> MyStrings { get; private set; }

    public MyException(List<String> myStrings)
    {
        this.MyStrings = myStrings;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢子类的想法,因为我更喜欢强烈的[er]输入. (4认同)
  • 强类型是好的,但是当你尝试处理异常时(使用级联catch语句),最大的优点是更清晰,更明显的代码 (2认同)
  • 是的,强烈[er]打字:D (2认同)