4

我在想 :

编写此代码:

 DataRow[] g = new DataRow[1] ;
 var t=new StringBuilder().AppendFormat("{0}", g[0]["aaa"].ToString());

Resharper 显示如下:(注意灰色)

在此处输入图像描述

在此处输入图像描述

3 questions please

1) removed() ToString,不调用removed(),对象如何输出其显示字符串ToString

2)是否建议删除它,因为他已经在内部调用它?还是因为其他原因?

3)不删除 ToString() ,它会调用两次吗?

4

2 回答 2

8

是的,它是多余的,因为AppendFormat(like String.Format) 在内部已经将其转换为字符串并且String.ToString总是多余的。

实际上,它对ICustomFormatter.Format每个提供的参数都使用该方法。

在无用方面也是多余的。因此,即使不需要多次完成任何工作(AppendFormat不会尝试将字符串转换为字符串),它也是没有意义的,因为无论如何AppendFormat 都会这样做。因此 resharper 尝试在此处简化您的代码。

于 2012-10-31T11:42:54.547 回答
4

您可能想看:复合格式

处理订单

通过执行以下列表中的步骤,将参数列表中与格式项对应的每个值转换为字符串。如果前三个步骤中的任何条件为真,则在该步骤中返回值的字符串表示形式,并且不执行后续步骤。

  1. 如果要格式化的值为空,则返回一个空字符串(“”)。
  2. 如果复合格式化方法包含一个类型为 IFormatProvider 的参数,该参数也实现了 ICustomFormatter 接口,则该值将传递给 ICustomFormatterFormat 方法。
  3. 如果该值实现了 IFormattable 接口,则调用其 IFormattableToString 方法。
  4. 调用该类型的 ToString 方法,该方法要么被重写,要么从 Object 类继承。

DataRow似乎继承自System.Object并且不实现IFormatProvideror IFormattableToString,所以我相信,它的ToString方法被调用以在内部获取字符串表示,并且具有显式.ToString被认为是多余的。

于 2012-10-31T11:44:12.267 回答