C# 空字符串对象上的String.ToString()方法

C# 空字符串对象上的String.ToString()方法,c#,nullreferenceexception,tostring,C#,Nullreferenceexception,Tostring,我有以下代码: namespace Rextester { public class Program { public static void Main(string[] args) { //Your code goes here var obj=(person)Activator.CreateInstance(typeof(person)); Console.WriteLin

我有以下代码:

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            var obj=(person)Activator.CreateInstance(typeof(person));
            Console.WriteLine(obj);
        }
    }
     public class person
        {
            public int id { get; set; }
            public string name { get; set; }
            public DateTime dob { get; set; }

            public override string ToString()
            {
                return id.ToString() + " " + name + " " + dob.ToString();
            }
        }
}
这将产生以下输出:

0  1/1/0001 12:00:00 AM
但是,如果将
person.ToString()
更改为以下内容:

public override string ToString()
{
        return id.ToString() + " " + name.ToString() + " " + dob.ToString();
}
我得到以下错误:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Rextester.person.ToString()
有人能解释一下吗


编辑

我猜您的代码示例不正确,因为它在您的问题中,您实际上看到了这种行为:

return id.ToString() + " " + name + " " + dob.ToString(); 
有效

return id.ToString() + " " + name.ToString() + " " + dob.ToString();
不起作用

这是因为向字符串添加null值是合法的,但在null实例上调用方法则不合法

见这个问题:

1)那么……这行代码与上面的代码有何不同?2) 为什么您使用的是
Activator
,而不仅仅是构造函数?为什么不使用
person
的默认构造函数?我也说不出你改变了什么。@SamLeach不,不是。堆栈跟踪本身就证明了这一点。请编辑您的答案,告诉我们您对Person.ToString真正做了哪些更改。没有这些,很难回答你的问题。@Servy-这不是他发布的代码,但很明显他发布的代码不正确,因为它与第一个版本完全相同。nvuono对其意图的猜测很有意义。@hatchet还有很多事情可以做。与其猜测,不如简单地等待OP编辑他的真实代码。