实现具有2个返回值的方法的最佳方法是什么?
本文关键字:方法 最佳 是什么 返回值 2个 实现 | 更新日期: 2023-09-27 18:08:24
我经常遇到一些代码,我必须返回一个布尔值来指示方法是否成功完成,并且在出现问题时返回一个带有错误消息的字符串。
我用两种方式实现了这个。第一个包含一个响应类,所有类的所有方法都使用这个响应类进行通信。例子:
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;
}
}
}
有正确的方法吗?
c#通常依赖于异常,而不是依靠返回值来知道某事是否成功,或者如果没有,错误是什么。如果你的程序可以工作,不要抛出异常。如果它不工作,抛出一个异常,并在抛出的异常中包含错误消息。
我个人更喜欢使用ref
关键字。
public bool DoSomething(ref string returnValue) {
returnValue = "something";
return true;
}
string returnValue = "";
DoSomething(ref returnValue);
// returnValue now has new value.