c#??操作员短路?

时间:2011-03-15 22:36:08

标签: c# operators short-circuiting

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

示例:

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

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

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

另一种表达问题的方式:将右手表达的??如果左手不为空,则运算符得到评估?

3 个答案:

答案 0 :(得分:47)

是的,它在C# Language Specification(由我突出显示)中这样说:

  

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

答案 1 :(得分:16)

是的,它短路。

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

上述程序输出“Hi”而不是抛出NullReferenceException

答案 2 :(得分:7)

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

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

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