如何收集不同功能的错误?

时间:2015-06-21 07:17:18

标签: c# error-handling

我正在做一个关于C#的项目。这是一个使用GSM调制解调器发送消息的项目。在我的项目中,我有几个可能会出错的函数。我使用了一个字符串变量来存储错误信息。基本流程是这样的。

class SMS{
      string message;
      public string getport(){
         if(ErrorCondition)
            message="Error Finding port";
         return port;         
      }
      public void executecommand(command){
         if(ErrorCondition1)
            message="Error Executing Command";
         else(ErrorCondition2)
            message="No Response from device";         
      }
      public void sendMessage(int number, string text, out string error){
           findport();
           executecommand(command);
           error = message;
      }
}

注意:这不是工作代码

这是我想收集错误信息的方式,但我不确定我是否正确地采用了这种方式。我需要你的帮助。有更好的方法吗?错误字符串不保存任何字符串。 更新:由于Exception的答案即将到来,我对try catch的安排感到困惑,在这里我有我的实际代码,以便我帮助提供进一步的建议。

public string ReadResponse(SerialPort port, int timeout)
{
    string buffer = string.Empty;
    try
    {
        do
        {
            if (receiveNow.WaitOne(timeout, false))
            {
               string t = port.ReadExisting();
               buffer += t;
            }
            else
            {
               if (buffer.Length > 0)
                   message = "Response incomplete";
               else
                   message = "Error on Modem";
             }
     }
     while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.EndsWith("\r\nERROR\r\n"));
 }
 catch (Exception ex)
 {
     throw ex;
 }
 return buffer;
}

2 个答案:

答案 0 :(得分:3)

您的(伪)代码可以重构为使用事实上的方法来管理C#中的错误,这是例外。根据您的代码,您习惯使用特殊变量或返回值作为错误消息,并且没有错误,它不会是其他C#开发人员所期望的。

这是一些(伪)代码,用于演示我正在输入的内容。

out

您会注意到SendMessage中没有libA.so变量来处理将错误传递给调用代码。这是由抛出的异常处理的。调用代码可以自由决定如何最好地处理异常。

答案 1 :(得分:1)

您可以声明

string message;

private List<string> message;

并将消息添加到列表中,也有助于捕获多个错误。同时将其设为私有,以便其他类无法访问。