2

我经常遇到一些代码,我必须返回一个布尔值来指示方法是否成功完成,并在出现问题时返回一个带有错误消息的字符串。

我以两种方式实现了这一点。首先是一个响应类,所有类的所有方法都使用这个响应类进行通信。例子:

public class ReturnValue {
    public bool Ok;
    public string Msg;
    public object SomeData;

    public ReturnValue() {
        this.Ok = true;
        this.Msg = null;
    }

    public ReturnValue(string Msg) {
        this.Ok = true;
        this.Msg = Msg;
    }

    public ReturnValue(object SomeData) {
        this.Ok = true;
        this.SomeData = SomeData;
    }

    public ReturnValue(bool Ok, string Msg) {
        this.Ok = Ok;
        this.Msg = Msg;
    }

    public ReturnValue(bool Ok, string Msg, object SomeData) {
        this.Ok = Ok;
        this.Msg = Msg;
        this.SomeData = SomeData;
    }
}

public class Test {
    public ReturnValue DoSomething() {
        if (true) {
            return new ReturnValue();
        } else {
            return new ReturnValue(false, "Something went wrong.");
        }
    }
}

第二种方法是有一个方法来存储消息以防出错并查看消息只需调用此方法即可。例子:

public class Test {
    public string ReturnValue { get; protected set; }

    public bool DoSomething() {
        ReturnValue = "";

        if (true) {
            return true;
        } else {
            ReturnValue = "Something went wrong.";
            return false;
        }
    }
}

有正确的方法吗?

4

2 回答 2

3

C# 不依赖于返回值来知道某事是否成功,或者如果没有成功,则错误是什么,C# 通常依赖于异常。如果您的程序有效,请不要抛出异常。如果它不起作用,则抛出异常并将错误消息包含在抛出的异常中。

于 2013-04-10T16:29:31.603 回答
0

就个人而言,我更喜欢使用ref关键字。

public bool DoSomething(ref string returnValue) {
    returnValue = "something";
    return true;
} 


string returnValue = "";
DoSomething(ref returnValue);
// returnValue now has new value.
于 2013-04-10T16:29:14.217 回答