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编辑他的真实代码。