2016-11-14 25 views
1

文字列内のトークンだけでなく、その形式自体も補間したいと思います。ここでは、ローカル変数のフォーマット文字列をロードstring.Formatを使用した例です:補間された文字列内の補間形式文字列

object boxedDate = DateTime.Today; 
var dateFormat = "MM-dd-yyyy"; 
var dateString = string.Format($"{{0:{dateFormat}}}", boxedDate); 

補間文字列構文を使用すると、しかし、文字列のフォーマット部分は純粋にリテラルであるようです。概念的には、次のようなことをしたいと考えています。

dateString = $"{boxedDate:{dateFormat}}"; 

もちろん動作しません。私は日時をVHS版と、このような.ToString()を呼び出すことができることを知っている:

dateString = $"{((DateTime)boxedDate).ToString(dateFormat)}"; 

...それは、実行時にタイプを知るために私を必要とします。これは、小数点、整数、日付などである可能性があります。

これは契約の破損者ではありません。補間された文字列構文でこれを実際に行う方法がない場合、私はいつもstring.Formatを使用することができます。

答えて

1

私は、適切なフォーマットを選択するためにタイプを知っているエスケープや、ある種の変換ロジックがないと思います。 FormattableStringタイプはあなたの原因を少しでも助けます。

var lcid = "en-US"; 
FormattableString f = $"{model.Date:D}"; 
var s = f.ToString(new CultureInfo(lcid)); 

この場合、文化情報に基づいて表示形式を調整するようにしています。もちろん、型について知っていたり、値を事前に変換しておく必要があります。

それ以外は、私はToStringstring.Formatの方法が最善の策だと思います。