根据MSDN,如果format为null(非常合理),则抛出String.Format,link here.
但测试说它只会在第二个参数为空时才会这样做,而不是第二个参数是否填充。
以下内容不会抛出:
string test = string.Format(null, "string");
以下投诉抱怨第一个参数(格式):
string test = string.Format(null, null);
使用JustDecompile进一步挖掘源代码调用以下方法:
private static string FormatHelper(IFormatProvider provider, string format, ParamsArray args)
{
if (format == null)
{
throw new ArgumentNullException("format");
}
return StringBuilderCache.GetStringAndRelease(StringBuilderCache.Acquire(format.Length + args.Length * 8).AppendFormatHelper(provider, format, args));
}
这没有任何意义,因为格式为null并且不会抛出异常。任何提示?
答案 0 :(得分:9)
string.Format(IFormatProvider, string, params object[])
- 因此您要为provider
参数传递一个null参数,该参数完全有效(并且意味着使用当前文化)。
该重载“更好”,因为将第二个参数从字符串文字转换为string
要好于从字符串文字到object
的转换。
如果使用参数名称强制正确重载,请加载:
string text = string.Format(format: null, arg0: "string");
...然后按预期抛出异常。