在此示例中编写obj.ToString()
还是仅obj
?
Object obj = new Object();
Console.WriteLine(obj.ToString());
// or
Console.WriteLine(obj);
真正的区别是什么?这是一种更好的编码风格吗?
答案 0 :(得分:2)
当您将Object
传递给Console.WriteLine()
时,它会首先检查它是否正在实施IFormattable
界面。 Console.WriteLine(obj.ToString());
会直接致电ToString
。
更新:(关于Rasik的评论)
此示例显示了两种方法的输出差异。 (参数String
vs Object
)
public class MyObject : IFormattable
{
public string ToString(string format, IFormatProvider formatProvider)
{
return "IFormattable";
}
public override string ToString()
{
return "ToString";
}
}
class Program
{
static void Main(string[] args)
{
var obj = new MyObject();
Console.WriteLine(obj);
Console.WriteLine(obj.ToString());
Console.ReadKey();
}
}
结果:
IFormattable
ToString
答案 1 :(得分:1)
调用Console.WriteLine(obj.ToString())
和Console.WriteLine(obj)
似乎相同,但您调用的方法不同。
如果您致电Console.WriteLine(object),则会进行空检查。如果为负数,则调用对象的ToString()
方法。
如果您致电Console.WriteLine(string),则会进行空检查。如果为负数,则直接写入字符串。
通常,只需发送对象即可,忽略调用ToString()
方法。这是多余的。如果你打电话,但确保你没有陷入null
陷阱。称之为:obj?.ToString()
或更明确地使用null
:
Console.WriteLine(obj == null ? "NULL" : obj);
答案 2 :(得分:0)
正如Quality Catalyst所说,当你使用 Console.WriteLine 直接使用字符串ou对象时,你实际上正在使用该方法的不同重载;在这种情况下,行为没有区别。
我希望这可以帮到你!