概要
文字列補間で文字列結合を行おうとした
環境
・Windows10
・framework 4.5.2
コード
Program.cs
static void Main(string[] args)
{
var s1 = @"{str";
var s2 = @"ss}";
var s = string.Format($"{s1}:{s2}");
Console.WriteLine(s);
}
実行結果
単純に2つの文字列を:
で結合して{str:ss}
の結果を得ようとした。
が、
ハンドルされていない例外: System.FormatException: 入力文字列の形式が正しくありません。
の例外が。。
どうも{
が入っていると再評価されるようで展開に失敗していた模様。
改善
引数を指定する形に変更
Program.cs
static void Main(string[] args)
{
var s1 = @"{str";
var s2 = @"ss}";
var s = string.Format("{0}:{1}", s1, s2);
Console.WriteLine(s);
}
無事結合した結果{str:ss}
が取得できました。
再評価されるとは知らなんだ。。
@lensouko さんのコメントより、内部の{s1}:{s2}
が先に展開されてその後string.Format("{str:ss}");
になるってことで理解できました。
展開された文字列に対しstring.Format
できるか
先に展開されるのなら、展開された文字列に対してstring.Format
できるか試してみました。
Program.cs
static void Main(string[] args)
{
var s1 = @"{str";
var s2 = @"ss}";
#pragma warning disable CS0219 // 変数は割り当てられていますが、その値は使用されていません
var strss = @"I an strss!";
#pragma warning restore CS0219 // 変数は割り当てられていますが、その値は使用されていません
var s = string.Format($"{s1}{s2}");
Console.WriteLine(s);
}
そんなにうまい話はなかった。
ハンドルされていない例外: System.FormatException: 入力文字列の形式が正しくありません。