??の相対的な優先順位のため および+演算子。これを試して:
string SpeakerName = (name.First ?? "") + " " + (name.Last ?? "");
元の例は、次のように評価しています。
string SpeakerName = name.First ?? ("" + " " + (name.Last ?? ""));
また、ここでJonの回答を読んでください:C#null合体(??)演算子の演算子の優先順位は何ですか?
彼がそこで示唆しているように、これもうまくいくはずです:
string SpeakerName = name.First + " " + name.Last;
これは、以下の@LBの回答から、トリムを除いたものにコンパイルされるためです。
string SpeakerName = String.Format("{0} {1}", name.First, name.Last)
編集:
また、最初と最後の両方の== nullで、結果が空の文字列になるように依頼しました。一般に、これは結果を呼び出すことで解決されます.Trim()
が、それは完全に同等ではありません。たとえば、名前がnullでない場合、何らかの理由で先頭または末尾のスペースが必要になる場合があります。たとえば、「Fred」+「Astair」=>「FredAstair」などです。私たちは皆、あなたがこれらを切り落としたいと思うだろうと思いました。そうでない場合は、条件付きを使用することをお勧めします。
string SpeakerName = name.First + " " + name.Last;
SpeakerName = SpeakerName == " " ? String.Empty : SpeakerName;
先頭または末尾のスペースが必要ない場合は.Trim()
、@LBのようにを追加してください。