Invoking a method designed to return a string representation of an object which is already a string is a waste of keystrokes. Similarly, explicitly invoking ``ToString()`` when the compiler would do it implicitly is also needless code-bloat. This rule raises an issue when ``ToString()`` is invoked: * on a ``string`` * on a non-``string`` operand to concatenation * on an argument to ``string.Format`` == Noncompliant Code Example ---- var s = "foo"; var t = "fee fie foe " + s.ToString(); // Noncompliant var someObject = new object(); var u = "" + someObject.ToString(); // Noncompliant var v = string.Format("{0}", someObject.ToString()); // Noncompliant ---- == Compliant Solution ---- var s = "foo"; var t = "fee fie foe " + s; var someObject = new object(); var u = "" + someObject; var v = string.Format("{0}", someObject); ---- == Exceptions The rule does not report on value types, where leaving off the ``ToString()`` call would result in automatic boxing. ---- var v = string.Format("{0}", 1.ToString()); ----