2012-02-19 11 views
91

私はC#(Pythonの背景から来る)で次の操作を実行したい:文字列をどのように補間しますか?

strVar = "stack" 
mystr = "This is %soverflow" % (strVar) 

私はそれの外の値を文字列内のトークンを交換するにはどうすればよいですか?

答えて

70
string mystr = string.Format("This is {0}overflow", strVar); 

そして、あなたもnamed parametersの代わりに、インデックスを使用することができます。

5

オペレータはありません。 string.Formatを使用する必要があります。

string strVar = "stack"; 
string mystr = string.Format("This is {0}soverflow", strVar); 

残念ながらstring.Format静的メソッドであるので、あなたは、単に"This is {0}soverflow".Format(strVar)を書き込むことはできません。この構文を可能にする拡張メソッドを定義している人もいます。

4

使用string.Format

string mystr = string.Format("This is {0}overflow", "stack"); 
0

用途:

strVar = "stack" 
mystr = String.Format("This is {0}", strVar); 
3

あなたはString.Format()を使用する必要があります。構文は少し異なりますが、代わりに数値のプレースホルダが使用されます。

例:

String.Format("item {0}, item {1}", "one", "two") 

は、より多くの詳細については、http://msdn.microsoft.com/en-us/library/system.string.format.aspxを見てください。

1

2つの選択肢があります。 String.Formatを使用することも、連結演算子を使用することもできます。

String newString = String.Format("I inserted this string {0} into this one", oldstring); 

OR

String newString = "I inserted this string " + oldstring + " into this one"; 
+0

)'のStringBuilderを使用しています。 StringBuilderは通常、多くの文字列を連結するとより効率的ですが、連結演算子は1つの文字列に対して完璧です。 'String.Format()'は、書式を出力に適用する必要がある場合などに便利です。数値にパディングや先行ゼロを追加します。したがって、 'String.Format()'をループで使用すると、多くのStringBuilderがインスタンス化される可能性があります。この状況では、ループの外側で宣言された単一のStringBuilderと、ループ内では 'AppendFormat()'を使用する方がよいでしょう。 –

13

あなたは、文字列に値をドロップするstring.Formatを使用することができます場合は

var strVar = "stack"; 
var myStr = "This is " + strVar + "overflow"; 

private static readonly string formatString = "This is {0}overflow"; 
... 
var strVar = "stack"; 
var myStr = string.Format(formatString, "stack"); 

代替は、C#の連結演算子を使用することですあなたはたくさんのことをしています連結は、より効率的であるStringBuilderクラスを使用します。

var strVar = "stack"; 
var stringBuilder = new StringBuilder("This is "); 
for (;;) 
{ 
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-) 
} 
stringBuilder.Append("overflow"); 
var myStr = stringBuilder.ToString(); 
236

これは、C#6.0(Visual Studioの2015+)のとして追加されました。

例:

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName); 

その他のリソース:

var planetName = "Bob"; 
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!"; 
// formattedStr should be "Hello planet Bob, my name is Ford!" 

これは糖衣構文である

String Interpolation for C# (v2) Discussion

C# 6.0 Language Preview

+0

モノラル用パッチ(2009年の日付、走行距離は異なる場合があります) http://tirania.org/blog/archive/2009/Dec-20.html –

+1

モノラルユーザーの場合:http://stackoverflow.com/questions/29208869/c-sharp-6-0-string-interpolation-in-mono-mcs –

+0

この機能はとても美しいものです。特にVS2015とエディタのサポートにより、補間された文字列をはっきりと見て、インテリセンスを得ることができます。それはメソッドでも動作します! '$("この機能は{GetDescription(FEATURE_AMAZING)}} ");' – Patrick

6

あなたは現在、C#6.0でのVisual Studio 2015を使用する場合は、以下を試してみてください。

var strVar = "stack"; 

string str = $"This is {strVar} OverFlow"; 

機能は、文字列の補間と呼ばれていること。

+4

これは単に 'string str = $"ではありませんか?これは{strVar} OverFlow ";'ですか? –

+0

'CS1009 \t認識できないエスケープシーケンス ' – guneysus

+0

これはC#6.0 nly @guneysusを起動しているので、これはコンパイルコードではありません –

0

string.Replaceとプレースホルダを実装する1つのより多くの方法があります、奇妙な特定の状況で役立ちます:カバー `String.Formatの(下の

mystr = mystr.Replace("%soverflow", strVar); 
関連する問題