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

时间:2017-05-02 11:30:05

标签: c# string-formatting string-interpolation

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

var someString = $" the date was ... {_criteria.DateFrom:dd-MMM-yyyy}";

但是我在同一个方法中反复使用相同的格式,所以想软编码,但不知道怎么做,或者即使它可能,

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

有人可以告诉我该怎么做,或者向我证实这是不可能的,因为我已经做了一些阅读并没有发现任何可能的建议

1 个答案:

答案 0 :(得分:2)

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

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));