我听说没有必要使用带有单个占位符的string.Format。
例如,如何考虑CultureInfo.InvariantCulture
,
string myString = string.Format(CultureInfo.InvariantCulture, "{0}", myMethod());
myMethod()
会返回string
个对象。
顺便说一句,我修改了一些现有的代码,如下所示只有一个占位符
string myString = string.Format(CultureInfo.InvariantCulture, "{0}{1}", myMethod1(), myMethod2());
感谢。
答案 0 :(得分:3)
扩大评论范围。对于每个参数,String.Format
检查对象是否实现了IFormattable
接口,如下所示:
public interface IFormattable
{
string ToString(string format, IFormatProvider formatProvider);
}
如果参数实现了它,String.Format
将调用ToString
并将格式化程序传递给那里。否则,它将调用常规ToString
而不提供格式化程序。
许多类型(.NET Framework和第三方)都实现了此接口,例如所有数字类型,日期时间等。如果您的myMethod()
返回实现IFormattable
的类型 - 只需自己调用ToString
(为方便起见,大多数此类类型也会使用一个参数实现ToString
,这不属于{{1接口):
IFormattable
如果type没有实现这样的接口 - myMethod().ToString(CultureInfo.InvariantCulture)
也不会对它有用(不会使用你传递的格式化程序) - 所以什么都不会丢失。
更新:因为你的参数是字符串 - 没有必要将格式化程序传递给String.Format
,在你的特定情况下根本不需要使用String.Format
。 Formatter用于使用特定规则将转换对象转换为字符串,字符串已经是字符串。
在您的旧代码中有多个参数,其中一些可能不是字符串,然后传递文化是有道理的。即使所有参数都是字符串,也有人可能会安全地决定传递文化,因为谁知道以后会发生什么 - 有人可能会添加更多参数,或者当前参数可能会改变类型,当然,当这种情况发生时,没有人会改变String.Format
接受不变的文化。所以一般来说这种方法确实有意义。
然而,当只剩下一个参数并且是字符串时 - 对于此类复杂情况不再有任何意义 - 只需完全删除String.Format
语句并替换为String.Format
。