web-dev-qa-db-ja.com

文字列を補間するにはどうすればよいですか?

私はC#で次のことをしたい(Python background)から来る:)

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

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

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

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

85
Darin Dimitrov

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

例:

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!"

これは、次の構文上の砂糖です:

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

追加のリソース:

C#(v2)ディスカッションの文字列補間

C#6.0言語プレビュー

268
Ashtonian

string.Formatを使用して、値を文字列にドロップできます。

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

別の方法は、C#連結演算子を使用することです。

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

多数の連結を行っている場合は、より効率的な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();
14
David Clarke

現在C#6.0でVisual Studio 2015を使用している場合は、次を試してください。

var strVar = "stack";

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

この機能は文字列補間と呼ばれます。

12
Sakal

そのための演算子はありません。 _string.Format_ を使用する必要があります。

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

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

6
CodesInChaos

つかいます string.Format

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

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

例:

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

詳細については、 http://msdn.Microsoft.com/en-us/library/system.string.format.aspx をご覧ください。

4
Bruno Silva

String.Replaceでプレースホルダーを実装する方法がもう1つあります。特定の状況で奇妙なことに役立ちます。

mystr = mystr.Replace("%soverflow", strVar);
1
Talha Imam

次の方法を使用できます

文字列補間

$特殊文字は、文字列リテラルを補間された文字列として識別します。例えば.

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

補間された文字列は、補間された式を含む可能性のある文字列リテラルです。補間された文字列が結果文字列に解決されると、補間された式を持つアイテムは、式の結果の文字列表現に置き換えられます。

String.Format

オブジェクト、変数、または式の値を別の文字列に挿入する必要がある場合は、String.Formatを使用します。

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
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";
1
DwayneAllen

Expansiveでこれを実現できます: https://github.com/anderly/Expansive

0
anderly

つかいます:

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