寻找一种更简单的方法,同时也更省眼

本文关键字:更省 方法 更简单 一种 寻找 | 更新日期: 2023-09-27 17:50:16

你会如何重写以下内容,使其更容易看?

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