如何收集来自不同函数的错误
本文关键字:函数 错误 何收集 | 更新日期: 2023-09-27 17:57:26
我正在做一个关于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;
}
您的(伪)代码可以重构为使用C#中管理错误的实际方法,这是例外。根据您的代码,您已经习惯于使用一个特殊的变量或返回值作为错误消息,并且没有任何问题,这不是其他C#开发人员所期望的。
下面是一些(伪)代码,演示了我键入的内容。
class SMS {
public string GetPort() {
if (ErrorCondition) {
throw new PortNotFoundException("Error finding port.");
}
return port;
}
public void ExecuteCommand(Command command) {
if(ErrorCondition1) {
throw new UnknownErrorException("Error Executing Command");
}
else(ErrorCondition2) {
throw new NoResponseException("No Response from device");
}
}
public void SendMessage(int number, string text) {
FindPort();
ExecuteCommand(command);
}
}
您会注意到SendMessage
中没有out
变量来处理将错误传递给调用代码。这是由抛出的异常处理的。调用代码可以自由决定如何最好地处理异常。
您可以声明
string message;
至
private List<string> message;
并将消息添加到列表中,也将有助于捕获多个错误。还将其设为私有,以便其他类无法访问相同的类。