C# String.Format - 以自定义格式提供

C# String.Format - Feed in custom format

我想知道这是否可行,如果可行,如何实现。

我知道String.Format函数允许你指定一个参数的格式如下,例如:

String.Format("The Date is {0:yyyy-MM-dd}", DateTime.Now);

但我想知道以所需格式输入的最佳方式(例如 "yyyy-MM-dd"),以得到一个可以按如下方式工作的函数(不起作用,但显示了我的意思)试图完成):

static string CreateFileName(string filename, string DateTimeFormat = "yyyy-MM-dd")
{
    return String.Format("{0} - {1:{2}}", filename, DateTime.Now, DateTimeFormat);
}

我假设我可以放入一个假的占位符并先做一个 String.Replace:

string formatString = "{0} - {1:{FMT}}";
formatString = formatString.Replace("{FMT}", DateTimeFormat);

但我很想知道是否有更好的方法来完成我想做的事情。

谢谢!!

您可以使用:

var format = "yyyy-MM-dd";
var dateTimeString = string.Format("{0}", DateTime.Now.ToString(format));

所以你的函数会变成:

static string CreateFileName(string filename, string DateTimeFormat = "yyyy-MM-dd")
{
    return String.Format("{0} - {1}", filename, DateTime.Now.ToString(DateTimeFormat));
}

你可以试试这个:

static string CreateFileName(string filename, string DateTimeFormat = "yyyy-MM-dd")
{
    return String.Format("{0} - {1}", filename, DateTime.Now.ToString(DateTimeFormat));
}

同样在 Visual Studio 2015 你可以使用 $.

static string CreateFileName(string filename, string DateTimeFormat = "yyyy-MM-dd")
{
    return $"{filename} - {DateTime.Now.ToString(DateTimeFormat)}";
}

甚至更简单(使用表达式主体):

 static string CreateFileName(string filename, string DateTimeFormat = "yyyy-MM-dd") 
            => $"{filename} - {DateTime.Now.ToString(DateTimeFormat)}";

很简单,先自己合成格式

string CreateFileName(string filename, string dateTimeFormat = "yyyy-MM-dd")
{
    var format = string.Format("\{0\} - \{1:{0}\}", dateTimeFormat);
    return string.Format(format, filename, DateTime.Now);
}

你总能做到

return String.Format(new StringBuilder("{0} - {1:").Append(DateTimeFormat).Append("}").ToString(), 
                     filename, DateTime.Now);

...如果你想保持在一行中。