0

私は以下を持っていました:

string Name = name.First + " "  +  name.Last;

これは問題なく戻りますTom Jones

name.Firstがnullまたはname.Lastがnullの場合、次のようになります。

string SpeakerName = name.First ?? string.Empty + " "  +  name.Last ?? string.Empty;

奇妙なのは、それが戻るだけだということTomです。これはなぜですか。また、名前の名前がデフォルトで空の文字列になるように修正するにはどうすればif nullよいですか。

4

4 に答える 4

12

??の相対的な優先順位のため および+演算子。これを試して:

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のようにを追加してください。

于 2012-07-24T18:40:12.203 に答える
6
string SpeakerName = String.Format("{0} {1}", name.First, name.Last).Trim();
于 2012-07-24T18:42:13.060 に答える
2
string SpeakerName = name.First != null && name.Last != null 
                     ? string.Format("{0} {1}", name.First, name.Last) 
                     : string.Empty;
于 2012-07-24T18:43:54.707 に答える
-1
string fullName = (name.First + " "  +  name.Last).Trim();

これは、nullのいずれかまたは両方に対して機能し、先頭、末尾、またはスペースのみの文字列を返しません。

于 2012-07-24T18:55:10.893 に答える