Я не могу придумать лучшего заголовка, но эта ошибка заняла у меня много времени.
Может кто-нибудь объяснить мне, почему это дает мне разные результаты?
string may = "May";
string june = "June";
string july = "July";
Console.WriteLine(may?.Length ?? 0 + june?.Length ?? 0 + july?.Length ?? 0) ;
Console.WriteLine(may == null ? 0 : may.Length + june == null ? 0 : june.Length + july == null ? 0 : july.Length) ;
Console.WriteLine( (may == null ? 0 : may.Length) + (june == null ? 0 : june.Length) + (july == null ? 0 : july.Length)) ;
Я прошел через это, и в своей голове я просто не могу понять, что, черт возьми, происходит.
Какова последовательность оценки здесь?
Я бы ожидал, что логика слияния нулевой строки или троичная логика будет выглядеть примерно так (что работает, кстати!):
int tempRes = 0;
tempRes+=may == null ? 0 : may.Length;
tempRes+=june == null ? 0 : june.Length;
tempRes+=july == null ? 0 : july.Length;
Console.WriteLine(tempRes);