C# 冗余ToString代码?
我想知道: 编写此代码:C# 冗余ToString代码?,c#,.net,resharper,C#,.net,Resharper,我想知道: 编写此代码: DataRow[] g = new DataRow[1] ; var t=new StringBuilder().AppendFormat("{0}", g[0]["aaa"].ToString()); Resharper显示如下:(注意灰色) 请回答3个问题 1) 移除ToString(),对象如何在不调用移除的ToString()的情况下输出其显示字符串 2) 它是否建议删除它,因为他已经在内部调用了它?还是因为另一个原因 3) 如果不删除ToString
DataRow[] g = new DataRow[1] ;
var t=new StringBuilder().AppendFormat("{0}", g[0]["aaa"].ToString());
Resharper显示如下:(注意灰色)
请回答3个问题
1) 移除ToString
(),对象如何在不调用移除的ToString
()的情况下输出其显示字符串
2) 它是否建议删除它,因为他已经在内部调用了它?还是因为另一个原因
3) 如果不删除ToString(),它会调用它两次吗?是的,它是冗余的,因为
AppendFormat
(如String.Format
)内部已经将其转换为字符串,并且字符串。ToString
始终是冗余的
实际上,它对每个提供的参数都使用该方法
它在无用方面也是多余的。因此,即使不需要多次执行任何工作(AppendFormat
不会尝试将字符串转换为字符串),这也是毫无意义的,因为AppendFormat
无论如何都会这样做。因此,resharper尝试在此处简化代码。您可能希望看到:
处理订单
参数列表中与格式项对应的每个值都是
通过执行以下列表中的步骤转换为字符串。
如果前三步中的任何条件为真,则字符串
在该步骤中返回值的表示形式,然后
不执行步骤
而似乎继承自
System.Object
,并没有实现IFormatProvider
或IFormattableToString
,因此我认为,调用它的ToString
方法是为了在内部获得字符串表示,而显式的。ToString
被认为是多余的 在非空实例上内部调用ToString()
;p@RoyiNamir:否,ToString()
不会对字符串实例调用。冗余=不会执行两次吗?还是根本就没有?@RoyiNamir:我只是想把这一点考虑进去。是否执行两次取决于提供的格式化程序。通常Format
只返回指定的字符串(如果它已经是一个字符串)。然而,resharper试图简化您的代码,至少:)@Curt我的问题与重复的问题完全不同!我没有问为什么它会编译!删除ToString()调用的结果是什么?“我已经知道答案了,但是你问第一个问题,似乎有点毫无意义。”拉姆霍恩:结果也是一样的。我不明白你的评论。