传播 return 的最佳方式
Best way to make a return propagate
我找不到这个问题的答案,可能是因为我没有以正确的方式提出这个问题。
因此,我正在编写 class 中的方法,有时我希望它测试字符串的格式。如果不正确,我希望它向用户显示一条消息,并停止执行,以便用户可以修复该错误。我有这个:
if (Is not properly formated)
{
//get error information
//show error box with the formation error line
MessageBox.Show(String.Format(
"Error message{0}",
errorLine.ToString()), "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
当然这样会停止这个方法的执行,但是我想停止main方法(一个按钮点击方法)的执行。
在 C# 中执行此操作的最佳方法是什么?
您可以编写一个验证方法,如果值有效,returns true
,并且可选地 return 一个 string
告诉什么是错误的:
private bool Validate(string s, out string error)
{
if (string.IsNullOrEmpty(s))
{
error = "s is null";
return false;
}
else
{
error = null;
return true;
}
}
然后调用它:
string error;
if (!Validate(null, out error))
{
MessageBox.Show(error);
// Do something
}
如果您想构造可能的错误列表,您可以使用 enum
而不是 string
。
你真的应该在 C# 中使用异常,例如
private void Calculate(string[] lines)
{
try
{
lines.ForEach(Validate);
// process lines
}
catch(InvalidArgumentException ex)
{
MessageBox.Show(...);
}
}
private void Validate(string s)
{
if(s.IsNullOrEmpty)
throw new InvalidArgumentException(/* some details here*/);
}
我找不到这个问题的答案,可能是因为我没有以正确的方式提出这个问题。
因此,我正在编写 class 中的方法,有时我希望它测试字符串的格式。如果不正确,我希望它向用户显示一条消息,并停止执行,以便用户可以修复该错误。我有这个:
if (Is not properly formated)
{
//get error information
//show error box with the formation error line
MessageBox.Show(String.Format(
"Error message{0}",
errorLine.ToString()), "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
当然这样会停止这个方法的执行,但是我想停止main方法(一个按钮点击方法)的执行。
在 C# 中执行此操作的最佳方法是什么?
您可以编写一个验证方法,如果值有效,returns true
,并且可选地 return 一个 string
告诉什么是错误的:
private bool Validate(string s, out string error)
{
if (string.IsNullOrEmpty(s))
{
error = "s is null";
return false;
}
else
{
error = null;
return true;
}
}
然后调用它:
string error;
if (!Validate(null, out error))
{
MessageBox.Show(error);
// Do something
}
如果您想构造可能的错误列表,您可以使用 enum
而不是 string
。
你真的应该在 C# 中使用异常,例如
private void Calculate(string[] lines)
{
try
{
lines.ForEach(Validate);
// process lines
}
catch(InvalidArgumentException ex)
{
MessageBox.Show(...);
}
}
private void Validate(string s)
{
if(s.IsNullOrEmpty)
throw new InvalidArgumentException(/* some details here*/);
}