问题
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?
回答1:
Yes, it says so in the C# Language Specification (highlighting by me):
A null coalescing expression of the form
a ?? b
requiresa
to be of a nullable type or reference type. Ifa
is non-null, the result ofa ?? b
isa
; otherwise, the result isb
. The operation evaluatesb
only ifa
is null.
回答2:
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
.
回答3:
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".
来源:https://stackoverflow.com/questions/5318912/does-c-sharp-operator-short-circuit