Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 冗余ToString代码?_C#_.net_Resharper - Fatal编程技术网

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尝试在此处简化代码。

您可能希望看到:

处理订单

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

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

  • 而似乎继承自
    System.Object
    ,并没有实现
    IFormatProvider
    IFormattableToString
    ,因此我认为,调用它的
    ToString
    方法是为了在内部获得字符串表示,而显式的
    。ToString
    被认为是多余的

    在非空实例上内部调用
    ToString()
    ;p@RoyiNamir:否,
    ToString()
    不会对字符串实例调用。冗余=不会执行两次吗?还是根本就没有?@RoyiNamir:我只是想把这一点考虑进去。是否执行两次取决于提供的格式化程序。通常
    Format
    只返回指定的字符串(如果它已经是一个字符串)。然而,resharper试图简化您的代码,至少:)@Curt我的问题与重复的问题完全不同!我没有问为什么它会编译!删除ToString()调用的结果是什么?“我已经知道答案了,但是你问第一个问题,似乎有点毫无意义。”拉姆霍恩:结果也是一样的。我不明白你的评论。