有c#吗??操作者短路?

发布于 2024-10-22 07:22:06 字数 266 浏览 2 评论 0原文

在C#中使用??运算符时,如果测试的值不为空,是否会短路?

示例:

string test = null;
string test2 = test ?? "Default";

string test3 = test2 ?? test.ToLower();

test3 行是否成功或抛出空引用异常?

所以用另一种方式来表达这个问题: ?? 的右手表达会吗?如果左手不为空,运算符会被求值吗?

When using the ?? operator in C#, does it short circuit if the value being tested is not null?

Example:

string test = null;
string test2 = test ?? "Default";

string test3 = test2 ?? test.ToLower();

Does the test3 line succeed or throw a null reference exception?

So another way to phrase the question: Will the right hand expression of the ?? operator get evaluated if the left hand is not null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

婴鹅 2024-10-29 07:22:06

是的,C# 中是这样说的语言规范(我突出显示):

a ?? 形式的空合并表达式b 要求 a 为可为空类型或引用类型。如果 a 为非空,则 a ?? 的结果ba;否则,结果为b仅当 a 为 null 时,该操作才会计算 b

Yes, it says so in the C# Language Specification (highlighting by me):

A null coalescing expression of the form a ?? b requires a to be of a nullable type or reference type. If a is non-null, the result of a ?? b is a; otherwise, the result is b. The operation evaluates b only if a is null.

只为守护你 2024-10-29 07:22:06

是的,它短路了。

class Program
{
    public static void Main()
    {
        string s = null;
        string s2 = "Hi";
        Console.WriteLine(s2 ?? s.ToString());
    }
}

上面的程序输出“Hi”,而不是抛出 NullReferenceException。

Yes, it short circuits.

class Program
{
    public static void Main()
    {
        string s = null;
        string s2 = "Hi";
        Console.WriteLine(s2 ?? s.ToString());
    }
}

The above program outputs "Hi" rather than throwing a NullReferenceException.

眉黛浅 2024-10-29 07:22:06

是的。

    public Form1()
    {
        string string1 = "test" ?? test();
        MessageBox.Show(string1);
    }

    private string test()
    {
        MessageBox.Show("does not short circuit");
        return "test";
    }

如果它没有短路,则将调用 test() 并且消息框将显示它“没有短路”。

Yes.

    public Form1()
    {
        string string1 = "test" ?? test();
        MessageBox.Show(string1);
    }

    private string test()
    {
        MessageBox.Show("does not short circuit");
        return "test";
    }

If it did not short circuit, test() would be called and a messagebox would show that it "does not short circuit".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文