不确定这是可能还是被认为是不好的做法,但我想知道是否有好的方法来编写以上内容C#中的if
语句。
类似...
if (method throws exception)
{
// do something
}
else
{
// do something else
}
答案 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)
您可以利用委托并创建一些静态帮助器。
在这种情况下,您可以使用Action
或Func
。如果需要从执行的函数返回一些值,请添加另一个扩展方法,该方法可以接受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));