2012-04-02 29 views
2

可以说我有这样的代码:何时抛出一个异常时处理问题优雅

public void MyMethod(string Data, List<string> InputData) 
{ 
    //I would assume throwing an exception for nulls would be correct 
    if (String.IsNullOrWhiteSpace(Data) || InputData == null) 
    throw new ArgumentNullException("Oops"); 

    if (InputData.Count == 0) 
    //throw exception or use event to raise a problem 
    //throw Exception("Empty List") 
    //if (DisplayError != null) 
    // DisplayError("Empty List"); 
} 

现在有一个空的列表不是一个特殊的问题,所以我应该用它优雅的应对。一种方法是提出事件来通知问题。只是让我想知道为什么我不提高事件,如果参数为空。

什么是此类问题的最佳做法?

事件处理程序实例:

public class MyOtherClass 
{ 
    public event Action<string,List<string>> ItFired; 

    public void DoSomething() 
    { 
    if(ItFired != null) 
     ItFired(myString, myList); 
    } 
} 

public class AnotherClass 
{ 
    public void DoSomething() 
    { 
      var otherclass = new MyOtherClass(); 
      var myClass = new MyClass(); 

      otherClass.ItFired += myClass.MyMethod; 
    } 

} 
+0

的可能重复[更好,以检测异常并把他们或者只是让运行时扔?](http://stackoverflow.com/questions/9976870/is-better-to-detect-for-exceptions-and -throw了他们,或者,刚刚让运行时抛出,它们) – 2012-04-02 13:56:26

+0

@Steve盖茨:当你认为你不得不应付一个空列表作为特殊情况的话,那么*是*一个特殊的问题。当然,也可能有这样的原因,你为什么要在这里使用事件而不是异常,例如,当MyMethod本身是一个事件处理器(或其一部分),并且不会抛出任何异常。但是,由于性能方面的原因 - 当你不面对任何真正的性能问题 - 时争论这个问题 - 几乎总是一个完全错误的方法。 – 2012-04-02 14:57:13

回答

4

如果empty list也不例外问题不要在这种情况下引发异常Exceptions用于特殊情况。在这种情况下,您可以返回一些boolean(说)值,表示该函数未执行。

如果该功能,这将是一个特例的caller,那么它(主叫)将引发异常。

祝你好运。

+0

该方法不返回任何东西,它是一个事件处理程序。我在空值等方面定义了特殊的例子。如果我检查空列表,这不是例外,只是一个痛苦,否则我会抛出例外,如果事情不是很对,或者我应该抛出所有的地方这些例外? – 2012-04-02 13:38:12

+1

+1这也是值得注意的是,用于控制常规程序流的例外是相当缓慢的 - 一个经常被忽视的是,你往往不关心,当你把他们的实际问题,性能问题。 – 2012-04-02 13:41:58

+0

@AdamHouldsworth非常真实这就是为什么我倾向于使用事件 – 2012-04-02 13:42:28

相关问题