Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插值字符串的软编码格式说明符c#6.0_C#_String Formatting_String Interpolation - Fatal编程技术网

插值字符串的软编码格式说明符c#6.0

插值字符串的软编码格式说明符c#6.0,c#,string-formatting,string-interpolation,C#,String Formatting,String Interpolation,我知道我们可以在C#6中为字符串插值使用格式说明符 但是,我在同一方法中反复使用同一格式,因此希望对其进行软编码,但不确定如何进行,或者即使可能 DateTime favourite; DateTime dreaded; ... ... const string myFormat = "dd-MMM-yyyy"; var aBigVerbatimString = $@" my favorite day is {favourite:$myFormat} but my leas

我知道我们可以在C#6中为字符串插值使用格式说明符

但是,我在同一方法中反复使用同一格式,因此希望对其进行软编码,但不确定如何进行,或者即使可能

DateTime favourite;
DateTime dreaded;

...
...

const string myFormat = "dd-MMM-yyyy";

var aBigVerbatimString = $@"
    my favorite day is {favourite:$myFormat}
    but my least favourite is {dreaded:$myFormat}
    blah
    blah
   ";

有人能告诉我怎么做吗,或者向我证实这是不可能的,因为我读了一些书,没有发现任何迹象表明它可能的

字符串插值被直接编译成等价的格式语句,所以

var someString = $" the date was ... {_criteria.DateFrom:dd-MMM-yyyy}";
字面上变成

var someString = string.Format(
    " the date was ... {0:dd-MMM-yyyy}",
    _criteria.DateFrom);
这在功能上相当于

var someString = string.Format(
    " the date was ... {0}",
    _criteria.DateFrom.ToString("dd-MMM-yyyy"));
由于编译器最终将
dd MMM yyyy
视为要传递给
ToString()
方法的字符串文字,因此在使用此习惯用法时无法避免硬编码

如果要对格式说明符字符串进行软编码,可以选择直接使用
string.format
,如下所示:

var someString = string.Format(
    " the date was ... {0}",
    _criteria.DateFrom.ToString(formatSpecifier));
var someString = string.Format(
    " the date was ... {0}",
    _criteria.DateFrom.ToString(formatSpecifier));