gpt4 book ai didi

c# - 如何使用 void 方法而不是 bool() 实现提前返回(或覆盖返回)

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:57 25 4
gpt4 key购买 nike

我试图做类似下面代码的事情来避免使用 Boolean 返回类型方法,但我找不到任何正确实现它的方法:

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 作为返回类型而不是使用类型?

最佳答案

您可以简单地抛出一个异常并在调用者中捕获它。在你放置“throw”的地方留下了方法:

    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 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;
}

在调用者中你可以捕获它并使用额外的数据:

    public void CallingMethod()
{
try
{
myMethod(23);
}
catch (MyException e)
{
Console.WriteLine(e.Message + e.ExtraData);
}
}

关于c# - 如何使用 void 方法而不是 bool() 实现提前返回(或覆盖返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com