c# – 尝试捕获一个班轮(如“??”或三元运算符)

c# – 尝试捕获一个班轮(如“??”或三元运算符),第1张

概述所以我们有三元运算符.大!那就是??运算符,它对可空变量进行合并. 例: string emptyIfNull = strValue ?? ""; 问题:是否可以为try-catch实现这样的简单运算符? 例: string result = CoalesceException(someExpression, "");public static T CoalesceException<T>(e 所以我们有三元运算符.大!那就是??运算符,它对可空变量进行合并.

例:

string emptyIfNull = strValue ?? "";

问题:是否可以为try-catch实现这样的简单运算符?

例:

string result = CoalesceException(someExpression,"");public static T CoalesceException<T>(Expression,defaultValue){    try    {        return evaluate Expression; // ?    }    catch    {        return defaultValue;    }}

是否有可能实现一种尽可能容易使用的方法,甚至是某种类似于聚结的运算符?

解决方法 您可以:
public static T CoalesceException<T>(Func<T> func,T defaultValue = default(T)){    try    {        return func();    }    catch    {        return defaultValue;    }}

但我不确定这是你想要的……

使用:

string emptyIfError = CoalesceException(() => someExpressionThatReturnsAString,"");

例如…

string shortString = null;string emptyIfError = CoalesceException(() => shortString.Substring(10),"");

将返回“”而不是NullReferenceException

重要

写入的函数将始终导致defaultValue的“评估”.含义:

string Throws() { throw new Exception(); }string str1 = somethingTrue == true ? "Foo" : Throws();

这里不会抛出异常,因为不会计算Throws().同样的事情发生在? *** 作符.

string str2 = CoalesceException(() => ((string)null).ToString(),Throws());

这将在进入CoalesceException之前导致异常.解:

public static T CoalesceException<T>(Func<T> func,Func<T> defaultValue = null){    try    {        return func();    }    catch    {        return defaultValue != null ? defaultValue() : default(T);    }}

使用:

string emptyIfError = CoalesceException(() => someExpressionThatReturnsAString,() => "");
总结

以上是内存溢出为你收集整理的c# – 尝试捕获一个班轮(如“??”或三元运算符)全部内容,希望文章能够帮你解决c# – 尝试捕获一个班轮(如“??”或三元运算符)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存