你会如何重写以下内容,使其更容易看?
Func<DateTime, String> formatter = null;
formatter = new Func<DateTime, String>(d =>
{
var r = "";
foreach (var i in new[] { d.Day, d.Month, d.Year })
{
if (i < 10) r += "0";
r += i.ToString();
}
return r;
});
我会重写为:
Func<DateTime, String> formatter = d => d.ToString("ddMMyyyy",
CultureInfo.InvariantCulture);
唯一的区别是,对于公元1000年之前的日期,这将填充为4位而不是2位…
编辑:正如在评论中所指出的,这并没有复制原始代码中的错误——它将把(比如说)一个月的5格式化为"055"。在原始代码中修复此问题的最简单方法是:
if (i < 10) r += "0";
r += i;
(但我更喜欢我的代码:)
我最喜欢Jon Skeets的答案,但我想提供一个替代方案:
Func<DateTime, String> formatter = d => string.Format(
"{0:00}{1:00}{2:00}",
d.Day, d.Month, d.Year);
我经常检查这个网站的字符串格式:http://blog.stevex.net/string-formatting-in-csharp/
有什么理由不将整个格式化程序代码与ToString("ddMMyyyy")
交换呢?
Func<DateTime, String> formatter = d => d.ToString("ddMMyyyy");