我在想:
编写此代码:
DataRow[] g = new DataRow[1] ;
var t=new StringBuilder().AppendFormat("{0}", g[0]["aaa"].ToString());
Resharper表现得像:(注意灰色)
请提出3个问题
1)删除ToString
(),如何在不调用已移除的ToString
()的情况下输出其显示字符串?
2)是否建议删除它,因为已经在内部调用它?还是因为另一个原因?
3)不删除ToString(),它会调用两次吗?
答案 0 :(得分:8)
是的,这是多余的,因为AppendFormat
(如String.Format
)在内部已将其转换为字符串,而String.ToString
始终是多余的。
实际上它在每个提供的参数上使用ICustomFormatter.Format
方法。
在无用方面也是多余的。因此,即使不需要多次执行任何工作(AppendFormat
也不会尝试将字符串转换为字符串),因为AppendFormat
无论如何它都是没有意义的。因此,resharper试图在这里简化你的代码。
答案 1 :(得分:4)
您可能希望看到:Composite Formatting
处理订单
参数列表中与格式项对应的每个值都是 通过执行以下列表中的步骤转换为字符串。 如果前三个步骤中的任何条件为真,则为字符串 在该步骤中返回值的表示,然后返回 步骤没有执行。
- 如果要格式化的值为null,则返回空字符串("")。
- 如果复合格式化方法包含IFormatProvider类型的参数,该参数也实现了ICustomFormatter接口, 该值将传递给ICustomFormatterFormat方法。
- 如果值实现IFormattable接口,则调用其IFormattableToString方法。
- 调用类型的ToString方法,该方法被重写或从Object类继承。
醇>
虽然DataRow似乎继承自System.Object
而且没有implmenet IFormatProvider
或IFormattableToString
,所以我相信,它的ToString
方法被称为在内部获取字符串表示,并且明确.ToString
被认为是多余的。