你会如何重写以下内容,所以眼睛看起来更容易一些?
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;
});
答案 0 :(得分:6)
我将其重写为:
Func<DateTime, String> formatter = d => d.ToString("ddMMyyyy",
CultureInfo.InvariantCulture);
这里唯一不同的是,对于1000AD之前的日期,这将填充到4位而不是2 ...
编辑:正如评论中所述,这并没有复制原始代码中的错误 - 它会将(比方说)5个月格式化为“055”。在原始代码中解决此问题的最简单方法是:
if (i < 10) r += "0";
r += i;
(但我还是更喜欢我的代码:)
答案 1 :(得分:2)
我喜欢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/
答案 2 :(得分:1)
有什么理由不用ToString("ddMMyyyy")
来交换整个格式化程序代码吗?
答案 3 :(得分:1)
Func<DateTime, String> formatter = d => d.ToString("ddMMyyyy");