如我代码所述,格式化字符串和参数都是用户指定的,真实情况未必如此,但问题就是这样。
我在一个函数里封装了一段格式化的代码,其实格式化字符串和参数是通过不同途径传入的,但用户可以保证参数个数及含义与格式化字符串对应。我不能让用户直接直接Format函数生成格式化后的字符串再传给我。
用Reflector查看了一下String.Format函数,发现有点诡异。
public static string Format(string format, params object[] args)
{
return Format(null, format, args);
}
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
builder.AppendFormat(provider, format, args);
return builder.ToString();
}
这里
Format(IFormatProvider provider, string format, params object[] args)
的格式化参数同样是带params的,但
public static string Format(string format, params object[] args)
给它传递的却是一个直接的数组。
难道微软有什么机制保证不会把args直接当成一个单个参数么?