Console.WriteLine(obj.ToString); vs Console.WriteLine(obj);

时间:2016-03-21 21:12:22

标签: c# .net

在此示例中编写obj.ToString()还是仅obj

是否更好?
Object obj = new Object();
Console.WriteLine(obj.ToString());
// or
Console.WriteLine(obj);

真正的区别是什么?这是一种更好的编码风格吗?

3 个答案:

答案 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对象时,你实际上正在使用该方法的不同重载;在这种情况下,行为没有区别。

我希望这可以帮到你!