寻找更简单的方法 - 眼睛更容易

时间:2011-04-14 13:19:29

标签: c# linq

你会如何重写以下内容,所以眼睛看起来更容易一些?

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

4 个答案:

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