0

我有一个与 Web 服务对话的简单 C# 控制台应用程序。我不确定我处理期望和返回错误代码的方式是否正确。希望对这样做的好做法有意见。(我使用 CommandLine.dll 进行选项解析)

class Program
    {
        static int Main(string[] args) {
            var options = new Options();
            if (CommandLine.Parser.Default.ParseArguments(args, options)) {
                try {
                    var client = new MyWebService();
                    var response = client.MyFunction(new MyRequest() { Param1 = options.param1, Param2 = options.Param2 });
                    if (response.ErrorCode != 0) {
                        Console.WriteLine("Error code= " + response.ErrorCode);
                    }
                    else {
                        File.WriteAllText(options.OutputFile, response.File);
                        return 0;
                    }
                }
                catch (Exception exp) {
                    Console.WriteLine(exp.Message);
                    return 1;
                }
            }
            return 1;
        }
    }
4

2 回答 2

1

您应该使用Console.Error.*来编写错误。我会这样说:

if (response.ErrorCode != 0) {
    Console.Error.WriteLine("Error code= " + response.ErrorCode);
    return 1;
} else {
    File.WriteAllText(options.OutputFile, response.File);
}

加上决赛

return 0;

之后catch会更好,这样如果你有多阶段操作要做,编码会更容易(fall-through == ok, error == fast abort)

多阶段我的意思是:

call ws1
check for non-Exception errors of ws1, if errors abort
call ws2
check for non-Exception errors of ws2, if errors abort
call ws3
check for non-Exception errors of ws3, if errors abort
return success

在 cmd 提示符下,保存错误:

myprogram 2>err.txt

重定向输出+错误:

myprogram > err.txt 2>&1

(最后一个取自https://stackoverflow.com/a/1420981/613130

最后一件事:如果参数解析出错,你应该输出一个错误。

于 2013-08-14T06:26:08.917 回答
-1

如果发生错误,您应该重构MyWebService类和抛出异常。MyFunction而不是返回错误代码。这为您提供了在哪个级别可以处理错误方面的完全灵活性,并且使代码更具可读性。

于 2013-08-14T06:29:29.123 回答