2009-11-05 29 views
6

文字列の先頭にデータの接頭辞を付けるのに、文字列に+を追加するのと同様の方法で構文上の砂糖が少しありますか?接頭辞に+ =を付けたもの

+2

引数を逆にして+ =を呼び出すことはできませんか?私はC#に精通していないが、それはJavaで動作します。 – I82Much

+1

は、最初の文字列を2番目の文字列に追加し、2番目の文字列を最初の文字列の先頭に追加しないでください。結果は同じ文字列になりますが、間違った変数 –

+0

@ l82Muchにあります。確かにあなたは次のようなことをする必要があります:s = "Prepend" + = s; – Lazarus

答えて

20

だけ使用します。

x = "prefix" + x; 

これを行い何も複合代入演算子はありません。

+0

ありがとうジョン(トニー)。私はあなたのコメントを考慮に入れました。 –

17
sorry = "nope, " + sorry; 
0

これらは、連結演算子を使用することなく、文字列をマージするために使用できるFCLのメソッドです。 +と+ =演算子は、作成された文字列と一時文字列の性質のため、繰り返し呼び出されたとき(つまりループ)に多くのメモリを使用する傾向があります。 (編集:コメントで指摘されているように、String.Formatは効率的な解決策でもないことがよくあります)

これは砂糖よりも構文的に優れています。

string full = String.Format("{0}{1}{2}", "prefix", "main string", "last string"); 

^String.Format at MSDNの詳細情報

編集:String.Concat

string result = string.Concat("prefix", "last part"); 

^詳細情報:ただ、二つの文字列のため。

+0

String.Formatを繰り返し使用することは、問題のようになります。 String.Concatを使用すると、文字列を連結するだけで、String.Formatを使用するより効率的です。ループ内での連結は、String.Formatではなく、StringBuilderを使用する方が良い可能性があります。 –

+1

このようにString.Formatを使用することは非常に非効率的です。 CPUの使用ははるかに悪く、RAMも浪費します。代わりにString.Concatが必要です:string full = String.Concat( "prefix"、 "main string"、 "last string")。 String.Concatにループで構築した文字列[]を渡すこともできます(例えば、リストを作成してからToArray()することができます)。結果として得られる文字列を格納するのに必要な領域だけが割り当てられるため、メモリ使用量は最低限に抑えられます。平均的に "+"とString.Formatは、必要以上に約30%のRAMを割り当てます。これは大きな文字列を扱う場合にのみ重要です。 –

+0

ありがとうございます。非常に役立ちます。 –

7

あなたは常に拡張メソッドを書くことができます:

public static class StringExtensions{ 

    public static string Prefix(this string str, string prefix){ 
     return prefix + str; 
    } 

} 

var newString = "Bean".Prefix("Mr. "); 

それはそれにもかかわらず糖衣構文が、簡単ではありません。すでに提案されているものよりも単純ではありませんが。

7

ありC#で何= +演算子はありませんが、ありがたいことにOOがここに救助に来る:string.Insert詳細について

string value = "Jamie"; 
value = value.Insert(0, "Hi "); 

http://msdn.microsoft.com/en-us/library/system.string.insert.aspx

私は同意するだろうという= B + aはここで最も賢明な答えのようです。それはstring.Insertを使用するよりもはるかによく読んでいることは確かです。

+0

おかげでニック。私は最後にString.Concatメソッドを使うことにしました。 –

関連する問題