使用默认的 ToString()¶
ID: cs/call-to-object-tostring
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- reliability
- maintainability
Query suites:
- csharp-security-and-quality.qls
调用 System.Object
的(或 System.ValueType
的)ToString
方法将返回该值的类型的完全限定名称。在大多数情况下,这没有用,或者不是预期的结果。此规则查找对默认 ToString
方法的显式和隐式调用。
建议¶
如果可能,请覆盖默认的 ToString
方法,或执行定制的字符串转换。
示例¶
在以下示例中,首先对类型为 Person
的对象调用默认的 ToString
方法,然后对整数数组调用该方法。输出结果分别是 p: Bad+Person
和 ints: System.Int32[]
。
using System;
class Bad
{
static void Main(string[] args)
{
var p = new Person("Eric Arthur Blair");
Console.WriteLine("p: " + p);
var ints = new int[] { 1, 2, 3 };
Console.WriteLine("ints: " + ints);
}
class Person
{
private string Name;
public Person(string name)
{
this.Name = name;
}
}
}
在修复后的示例中,在 Person
类中覆盖了 ToString
方法,并使用 string.Join
打印整数数组的元素(在这种情况下无法覆盖 ToString
)。输出结果分别是 p: Eric Arthur Blair
和 ints: 1, 2, 3
。
using System;
class Good
{
static void Main(string[] args)
{
var p = new Person("Eric Arthur Blair");
Console.WriteLine("p: " + p);
var ints = new int[] { 1, 2, 3 };
Console.WriteLine("ints: " + string.Join(", ", ints));
}
class Person
{
private string Name;
public Person(string name)
{
this.Name = name;
}
public override string ToString() => Name;
}
}