Из-за относительного приоритета ?? и + операторы. Попробуй это:
string SpeakerName = (name.First ?? "") + " " + (name.Last ?? "");
Ваш исходный пример оценивается так, как если бы это было:
string SpeakerName = name.First ?? ("" + " " + (name.Last ?? ""));
Кроме того, прочитайте ответ Джона здесь: Каков приоритет оператора C# объединения нулей (??)?
Как он предлагает там, это тоже должно работать:
string SpeakerName = name.First + " " + name.Last;
Поскольку это компилируется в ответ @LB ниже, за вычетом обрезки:
string SpeakerName = String.Format("{0} {1}", name.First, name.Last)
РЕДАКТИРОВАТЬ:
Вы также спросили, что первое и последнее оба == null делают результат пустой строкой. Как правило, это решается вызовом .Trim()
для результата, но это не совсем эквивалентно. Например, по какой-то причине вам может понадобиться захотеть начальные или конечные пробелы, если имена не пустые, например. «Фред» + «Астер» => «Фред Астер». Мы все предполагали, что вы захотите обрезать их. Если вы этого не сделаете, я бы предложил использовать условное выражение:
string SpeakerName = name.First + " " + name.Last;
SpeakerName = SpeakerName == " " ? String.Empty : SpeakerName;
Если вам никогда не нужны начальные или конечные пробелы, просто добавьте .Trim()
как @L.B. делал
person
Chris Shain
schedule
24.07.2012
null
преобразуется в при использовании с оператором+
, где одно из выражений операндаstring
. напримерname.First + " " + name.Last
в этом случае даст тот же результат. Точно так же будет работатьstring.Format("{0} {1}", name.First, name.Last)
. Однако, как правило,"First "
или" Last"
или" "
по-прежнему не являются желаемым результатом, так что это можно было бы изучить ;-) - person   schedule 24.07.2012