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()); ----