Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时抛出异常以及何时优雅地处理问题_C#_.net_Design Patterns - Fatal编程技术网

C# 何时抛出异常以及何时优雅地处理问题

C# 何时抛出异常以及何时优雅地处理问题,c#,.net,design-patterns,C#,.net,Design Patterns,假设我有以下代码: 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");

假设我有以下代码:

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 void MyMethod(字符串数据、列表输入数据)
{
//我假设为null抛出异常是正确的
if(String.IsNullOrWhiteSpace(Data)| | InputData==null)
抛出新的ArgumentNullException(“Oops”);
如果(InputData.Count==0)
//引发异常或使用事件引发问题
//抛出异常(“空列表”)
//if(DisplayError!=null)
//显示错误(“空列表”);
}
现在有一个空的列表不是一个例外的问题,所以我应该优雅地处理它。一种方法是引发事件以通知问题。这让我想知道,如果参数为空,为什么不直接引发事件

这类问题的最佳做法是什么

事件处理程序示例:

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;
     }

}
公共类MyOtherClass
{
公共事件行动;
公共无效剂量测定法()
{
if(ItFired!=null)
ItFired(myString,myList);
}
}
公共类另一类
{
公共无效剂量测定法()
{
var otherclass=新的MyOtherClass();
var myClass=新的myClass();
otherClass.ItFired+=myClass.MyMethod;
}
}

如果
空列表
不是异常问题,则在这种情况下不要引发异常<代码>例外情况适用于例外情况。在这种情况下,您可以只返回一些
布尔值
(比如)表示函数未执行

如果该函数的
调用者
属于例外情况,则它(调用者)将引发异常


祝你好运。

如果
空列表
不是异常问题在这种情况下不要引发异常<代码>例外情况适用于例外情况。在这种情况下,您可以只返回一些
布尔值
(比如)表示函数未执行

如果该函数的
调用者
属于例外情况,则它(调用者)将引发异常


祝你好运。

该方法不返回任何内容,它是一个事件处理程序。我用空列表等术语定义异常。如果我检查空列表,这不是异常,这只是一种痛苦,否则,如果某些事情不太正确,我会到处抛出异常,或者我应该抛出所有这些异常吗?+1同样值得注意的是,控制常规程序流的异常非常缓慢-一个经常被忽视的性能问题,当您将它们用于实际问题时,您往往不关心这些问题。@AdamHouldsworth非常正确,这就是为什么我倾向于使用events@SteveJobs:从函数中,我看到它似乎不是标准事件处理程序。因此,您可以更改它的代理。在这种情况下,处理该事件的函数将能够与引发故障/成功事件的人进行通信。这可能是一些自定义事件参数(仅举一个例子)@Steve Gates:如果“空列表”不是一个例外情况,那么为什么它会成为一个需要错误显示或事件通知的问题?
MyMethod
能否不处理任意大小的列表n,其中n=0不是特例?该方法不返回任何内容,它是一个事件处理程序。我用空列表等术语定义异常。如果我检查空列表,这不是异常,这只是一种痛苦,否则,如果某些事情不太正确,我会到处抛出异常,或者我应该抛出所有这些异常吗?+1同样值得注意的是,控制常规程序流的异常非常缓慢-一个经常被忽视的性能问题,当您将它们用于实际问题时,您往往不关心这些问题。@AdamHouldsworth非常正确,这就是为什么我倾向于使用events@SteveJobs:从函数中,我看到它似乎不是标准事件处理程序。因此,您可以更改它的代理。在这种情况下,处理该事件的函数将能够与引发故障/成功事件的人进行通信。这可能是一些自定义事件参数(仅举一个例子)@Steve Gates:如果“空列表”不是一个例外情况,那么为什么它会成为一个需要错误显示或事件通知的问题?
MyMethod
能否不处理任意大小的列表n,其中n=0不是特例?可能重复@Steve Gates:当您认为必须将空列表作为特例处理时,这是一个例外问题。当然,在这里使用事件而不是异常也可能有原因,例如,当MyMethod本身是一个事件处理程序(或它的一部分)并且不应抛出任何异常时。但是由于性能原因而争论这个问题——当你没有遇到任何真正的性能问题时——几乎总是一个完全错误的方法。可能重复@Steve Gates:当你认为你必须作为特例处理空列表的情况时,这是一个例外问题。当然,在这里使用事件而不是异常也可能有原因,例如,当MyMethod本身是一个事件处理程序(或它的一部分)并且不应抛出任何异常时。但是由于性能原因而争论这个问题——当你没有遇到任何真正的性能问题时——几乎总是一个完全错误的方法。