我想格式化一个System.String.Format
有5个重载的字符串:
String String.Format(String format , Object arg0 )
String String.Format(String format , Object arg0 , Object arg1 )
String String.Format(String format , Object arg0 , Object arg1 , Object arg2 )
String String.Format(String format , params Object[] args )
String String.Format(IFormatProvider provider , String format , params Object[] args )
Run Code Online (Sandbox Code Playgroud)
我想使用第四个重载(采用一组对象的重载),如下所示:
let frm = "{0} - {1}"
let args = [| 1; 2 |]
System.String.Format(frm, args)
Run Code Online (Sandbox Code Playgroud)
问题是args参数被解释为一个Object,因此调用了第一个重载.所以我正确地得到以下错误:
System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
Run Code Online (Sandbox Code Playgroud)
有没有办法强制"正确"过载?
@ John的答案更优雅的变体是添加类型注释,以便编译器对数组的所有元素进行自动向上转换:
let frm = "{0} - {1}"
let args : obj [] = [| 1; 2 |]
System.String.Format(frm, args)
Run Code Online (Sandbox Code Playgroud)