2011-08-16 11 views
2

フルネームをフォーマットする最も速い方法は何ですか? middlenameとsuffixがnullまたは空である可能性がありますか?string.format条件付きスペースでの効率

string fullname = string.Format("{0} {1} {2} {3}", 
           FName, 
           MI, 
           LName, 
           Suffix); 

この問題は、MIまたは接尾辞が空の場合、2つのスペースがあることです。私はこれで第二のパスを作ることができる

string fullname = string.Format("{0}{1} {2}{3}", 
         FName, 
         string.IsNullOrEmpty(MI) ? "" : " " + MI, 
         LName, 
         string.IsNullOrEmpty(Suffix) ? "" : " " + Suffix); 

より良いオプションがあります:

fullname = fullname.Replace(" ", " "); 

または私はちょうどこのような何かを持つ文字列を作ることができますか? 最速は重要です。

+5

あなたが何百万回もやっていないのであれば、スピードは問題ではありません。コールがほんのわずかであればスピードは心配しません。 –

+3

'string fullName = string.Join(" "、new [] {FName、MI、LName、Suffix} .Where(i =>!string.IsNullOrEmpty(i))); ' –

+0

ロット。私は間違いなく他の時に.Joinを試してみます。 Looks nice – Parmenides

答えて

1

ヌルまたは空であることを最初に確認し、それぞれに特化したコードを記述します。私はchar[]バッファーをstring.FormatまたはStringBuilderより高速に処理することを直接期待します。

しかし、書式設定の名前がアプリケーションのパフォーマンスのボトルネックになっていることは奇妙なことです。数百万の名前を書式設定しても、それほど長くはならないはずです。

var parts = new[] { FName, MI, LName, Suffix }; 
string fullName = string.Join(" ", parts.Where(s => !string.IsNullOrWhiteSpace(s))); 

それはおそらく最速の解決策ではないのですが、それは何が起こっているのか、それはかなり明確になります:

3

私はこれを行うだろう。

+0

これはかなり気の利いたもので、今回は何を使うのではなく、将来価値のあるものになります。 – Parmenides

+0

それは私が使うものです。これはおそらく最速の方法ではありませんが、1秒あたり数百万の名前を処理します。 – CodesInChaos