2015-09-03 12 views
5

私は、文字列の補間を使用して変数をフォーマットする必要があり、フォーマット文字列が別の変数である:ここ可変フォーマットとC#の文字列補間

は私のサンプルコードは次のとおりです。

static void Main(string[] args) 
{ 
    int i = 12345; 

    Console.WriteLine($"Test 1: {i:N5}"); 

    var formatString = "N5"; 

    Console.WriteLine($"Test 2: {i:formatString}"); 
} 

テスト1つの作品、テスト2動作しません。

Test 2の正確な構文は何ですか?

答えて

0

文字列補間は、コンパイル段階で行われます。そのため、書式文字列に変数を使用することはできません。

+1

それはコンパイル時に実行されるという事実は、その制限とは何の関係もありません。コンパイラはあなたの文字列を簡単にフォーマット文字列に連結することができます。 – SLaks

+2

@SLaksそれは何でもできますが、できません。より良い答えは "それはそのように行われている"でしょうか? –

+0

あなたの最初の文を削除する方が良いでしょう。それはまったく関係ありません。 – SLaks

2

C#には必要な構文がありません。

0

私は、コードのこの部分をテストして、動作しているようです:

static void Main(string[] args) 
{ 
    int i = 12345; 

    Console.WriteLine("Test 1: {0:N5}",i); 

    var formatString = "N5"; 

    Console.WriteLine("Test 2: {0:" + formatString + "}", i); 

    Console.ReadLine(); 
} 
+1

それは文字列補間ではありません。 –

+1

それはまさに私が避けたいものです、Cの古い構文# – Brainstorming

+0

そして、あなたはdouble string.Formatを使うことができますか? "0 {0}}}"、i); ' – Marnix

3

あなたのコードは同等です:formatStringとして

Console.WriteLine(String.Format("Test 2: {0:formatString}", i)); 

あなたがネストさ、フォーマット文字列であるString.Format値を書式文字列に入れる呼び出し:

Console.WriteLine(String.Format(String.Format("Test 2: {{0:{0}}}", formatstring), i)); 

これはsではありません文字列補間をサポート。

+0

もしそうなら、古いC#string.format – Brainstorming

+1

と比較すると大きな制限があると思いますが、あなたの説明では面白いですが、これは半補間と半文字列形式で行うことができます.'Console.WriteLine($ "Test 2:{{ {0:{formatString}}} "、i);' –

+0

ありがとうございます@ M.kazem.Akhgary、それは動作します! ;-) – Brainstorming

1

あなたはString.Formatのせずに「構文的に」これを行うことができます最短の方法は、ToStringを使用している:

$"Test 2: {i.ToString(formatString)}" 
関連する問題