【问题标题】:Handling exceptions in asp .net处理asp .net中的异常
【发布时间】:2013-07-17 04:20:22
【问题描述】:

有没有更好的方法来处理异常?我可以做同样的事情,但只用一次 try catch 吗?

我需要创建自己的异常类吗?

try
{
   firstname = bd["firstname"].ToString();
}
catch (KeyNotFoundException fe)
{
   firstname = null;
}

try
{
   lastname = bd["lastname"].ToString();
}
catch (KeyNotFoundException fe)
{
   lastname = null;
}

try
{
   phone = bd["phone"].ToString();
}
catch (KeyNotFoundException fe)
{
   phone = null;
}

...
...

【问题讨论】:

  • 这是一个 BsonDocument 变量

标签: c# asp.net .net exception try-catch


【解决方案1】:

如果可能,不要对正常的程序流程使用异常:

firstname = bd.ContainsKey("firstname") ? bd["firstname"] : null;
lastname = bd.ContainsKey("lastname") ? bd["lastname"] : null;
phone = bd.ContainsKey("phone") ? bd["phone"] : null; 

或(假设您正在访问Dictionary):

bd.TryGetValue("firstname", out firstname);
bd.TryGetValue("lastname", out lastname);
bd.TryGetValue("phone", out phone);

【讨论】:

  • 既然您提到bdBsonDocument,您可以将ContainsKey 替换为Contains
  • 谢谢蒂姆,我得到了 ContainsValue、TryGetValue、TryGetElement 有什么区别?
  • @user2037696:我必须承认我没有使用 mongodb 的经验,但是,从documentation 看来,如果你想知道字典是否包含给定的字典,你必须使用Contains键(就像ContainsKey)。所以TryGetValue 似乎等同于Dictionary.TryGetValue
【解决方案2】:

firstname = Convert.ToString(bd["firstname"]);

lastname = Convert.ToString(bd["lastname"]);

phone = Convert.ToString(bd["phone"]);

尝试使用 .ToString() 的 Convert.ToString("string Value") 方法避免异常。

【讨论】:

    【解决方案3】:

    如果你想以最小的开销使用 try catch 块,你可以在一个 try 块中编写所有代码并编写多个 catch 块。

    try
    {
       firstname = bd["firstname"].ToString();
       lastname = bd["lastname"].ToString();
       phone = bd["phone"].ToString();
    }
    catch (KeyNotFoundException fe)
    {
       firstname = null;
    }
    
    catch (KeyNotFoundException ex)
    {
       lastname = null;
    }
    
    
    catch (KeyNotFoundException xe)
    {
       phone = null;
    }
    

    【讨论】:

    • 在多个 catch 块中使用相同的异常类型将不起作用:只会运行第一个。
    • 如果我有不同的异常对象怎么办?
    • 刚刚检查过:这是一个编译器错误 (.NET 4.5/C#5)。使用不同的标识符没有区别。
    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多