C# 如何使用void方法而不是bool()实现早期返回(或重写返回)
为了避免使用C# 如何使用void方法而不是bool()实现早期返回(或重写返回),c#,design-patterns,overriding,new-operator,C#,Design Patterns,Overriding,New Operator,为了避免使用Booleanreturn-type方法,我尝试执行类似于下面代码的操作,但我找不到任何正确实现它的方法: public void myMethod(int someInitializingParameter) { //return (kinda override operator) if(TargetObjToinitItsProperties == null) MsgDbgWin
Boolean
return-type方法,我尝试执行类似于下面代码的操作,但我找不到任何正确实现它的方法:
public void myMethod(int someInitializingParameter)
{
//return (kinda override operator)
if(TargetObjToinitItsProperties == null) MsgDbgWinShow("Error: Line#637-xxx.CS", "Property was accessed prior to parent object init");
TargetObjToInitItsProperties.IntProp1 = someInitializingParameter;
}
static void MsgDbgWinShow(string Wtitle, string Wmsg)
{
create a window (windowsTitle=Wtitle .. size width ...create TextBlock.Content= Wmsg...etc')
CreatedWindow.Show();
//here is self exit and return ...from self but will not act as return operator...
}
是否有任何方法将void用作返回类型而不是使用类型?您只需抛出一个异常并在调用者中捕获它即可。 这将方法保留在“抛出”的位置:
public void myMethod(int someInitializingParameter)
{
//return (kinda override operator)
if(TargetObjToinitItsProperties == null)
throw new Exception("Property was accessed prior to parent object init");
TargetObjToInitItsProperties.IntProp1 = someInitializingParameter;
}
您甚至可以在继承时创建自己的异常类型。然后您可以输入一些额外的数据:
class MyException : Exception
{
// some enhancements
public string ExtraData;
public MyException(string sMessage, string sExtraData)
: base(sMessage)
{
ExtraData = sExtraData;
}
}
public void CallingMethod()
{
try
{
myMethod(23);
}
catch (MyException e)
{
Console.WriteLine(e.Message + e.ExtraData);
}
}
现在你可以扔了:
public void myMethod(int someInitializingParameter)
{
//return (kinda override operator)
string sExtraData = "Hallo";
if (TargetObjToinitItsProperties == null)
throw new MyException("Property was accessed prior to parent object init",
sExtraData);
TargetObjToInitItsProperties.IntProp1 = someInitializingParameter;
}
在调用者中,您可以捕获它并使用额外的数据:
class MyException : Exception
{
// some enhancements
public string ExtraData;
public MyException(string sMessage, string sExtraData)
: base(sMessage)
{
ExtraData = sExtraData;
}
}
public void CallingMethod()
{
try
{
myMethod(23);
}
catch (MyException e)
{
Console.WriteLine(e.Message + e.ExtraData);
}
}
返回有什么问题代码>?在我还没有尝试过的领域,这听起来是一个不错的选择,只是(仔细想想)使用Exception
而不是一个简单的方法会不会很昂贵,或者我打开的窗口的成本不会更低?或者我错过了将try catch
与Exception混合在一起吗(我曾读到,异常处理很昂贵,或者只尝试捕获…)没问题,异常并不昂贵。如果你想显示一个消息框,我会在你捕获它的调用者那里这样做。我使用异常很多年了,而且我从来没有想过它属于性能。顺便说一句,异常是所有.net类的内置标准方式。在我的方法中,我可以当不处于编码调试模式时,父方法将在“Msgbxwindow”和登录文件之间进行选择。。。