C#“如果引发异常...”

时间:2020-01-13 10:04:58

标签: c# exception coding-style conditional-statements

不确定这是可能还是被认为是不好的做法,但我想知道是否有好的方法来编写以上内容C#中的if语句。

类似...

if (method throws exception)
{
    // do something
}
else
{
    // do something else
}

4 个答案:

答案 0 :(得分:1)

因此,您正在寻找的是try catch语句。这种结构在许多语言中相当普遍,但是对于C#来说,这是非常美妙的。 我将向您推荐有关c#错误处理的Microsoft文档。 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch

这应该教会您所有您需要知道的内容。 要简单了解其在我的术语中的工作原理,

try {
//execute code that you expect to throw an exception
}
Catch (KindOfError ErrorVariable) {
//Error has been thrown, execute code for it.
msgbox.show("Error Raised: " + ErrorVariable.Code.ToString())
}
Finally {
//Execute code here you want to run regardless of error outcome
msgbox.show("This code runs with or without an exception being thrown")
}

这应该可以帮助您!

答案 1 :(得分:0)

仅使用普通的try-catch块。如果引发了异常,它将进入catch块;否则,它将继续执行可能引发异常的方法之后的行。

try
 {
 MethodThatMightThrowException()
 // do something else
 }
catch
 {
 // do something
 }

答案 2 :(得分:0)

技术上可以catch例外:

 try { 
   var result = DoSomeAction(arguments);

   /* do something else : result is a valid value*/
 }
 catch (SomeException) {   //TODO: put the right exception type
   /* If exception is thrown; result is not valid */ 

   // throw; // uncomment, if you want to rethrow the exception
 }

但是,您可以实现TryGet 模式,并具有 clear if

https://ayoungdeveloper.com/post/2017-03-28-using-the-tryget-pattern-in-csharp/

并将其用作

 if (TryDoSomeAction(arguments, out var result)) {
   /* do something else : result is a valid value*/
 }
 else {
   /* result is not valid; if "exception" is thrown */ 
 }

答案 3 :(得分:0)

您可以利用委托并创建一些静态帮助器。

在这种情况下,您可以使用ActionFunc。如果需要从执行的函数返回一些值,请添加另一个扩展方法,该方法可以接受Func

public static class SilentRunner
{
    public static void Run(Action action, Action<Exception> onErrorHandler)
    {
        try
        {
            action();
        }
        catch (Exception e)
        {
            onErrorHandler(e);
        }
    }

    public static T Run<T>(Func<T> func, Action<Exception> onErrorHandler)
    {
        try
        {
            return func();
        }
        catch (Exception e)
        {
            onErrorHandler(e);
        }

        return default(T);
    }
}

然后使用它:

SilentRunner.Run(
     () => DoSomething(someObject),
     ex => DoSomethingElse(someObject, ex));

对于Func,您也可以获取结果:

var result = SilentRunner.Run(
     () => DoSomething(someObject),
     ex => DoSomethingElse(someObject, ex));