为什么我的对象不打印?
Why won't my objects print?
站点和 c# 的新手。这是我第一次使用 c#,我无法正确打印我的对象。 (例如 Million,Max 55。Cardenas,Jose,22)。我很确定错误出在我的访问器中,但我似乎无法正确处理。
using System.IO;
using System;
class PersonApp
{
static void Main()
{
Random random = new Random();
Person p1 = new Person();
Person p2 = new Person();
p1.Fname = "Max";
p1.Lname = "Million";
p1.Id = random.Next(1,100);
p2.Fname = "Jose";
p2.Lname = "Cardenas";
p2.Id = random.Next(1,100);
Console.WriteLine(p1,p2);
}
}
using System.IO;
using System;
public class Person
{
private string Fname;
private string Lname;
private int Id;
public Person(){
Fname = string.empty;
Lname = string.empty;
Id = 0;
}
public string Fname
{
get
{
return Fname;
}
set
{
Fname = value;
}
}
public string Lname
{
get
{
return Lname;
}
set
{
Lname = value;
}
}
public int Id
{
get
{
return Id;
}
set
{
Id = value;
}
}
}
您需要访问 属性 方法以获取打印的值
错误代码:
Console.WriteLine(p1,p2); // You are trying to print Objects and this is wrong. !!
更正:使用附件的 get 打印输出。
Console.WriteLine(p1.Fname); // Print first name "Max"
同样
Console.WriteLine(p1.Lname); // print Last name
Console.WriteLine(p1.Id); // Print ID
你的class也需要更正
using System.IO;
using System;
public class Person{
private string fname;
private string lname;
private int id;
public string Fname
{
get
{
return fname;
}
set
{
fname = value;
}
}
public string Lname
{
get
{
return lname;
}
set
{
lname = value;
}
}
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
}
现在你可以像
一样使用它了 Person a = new Person();
a.Fname = "k";
a.Lname = "Do";
a.Id = 1024;
Console.WriteLine(a.Fname+" "+a.Lname+" "+a.Id);
您的代码中存在一些问题。
首先,您不能像这样将多个值传递给 Console.WriteLine
:
Console.WriteLine(p1, p2);
一次做一个:
Console.WriteLine(p1);
Console.WriteLine(p2);
其次,您不能将您的私有支持字段命名为与用于 get/set 的 public 属性 相同。您可以随意命名它们...通常私有变量以小写字母或下划线开头,但这取决于您。
修复这些问题后,您仍然会得到异常输出,这实际上是 class 的完整命名空间。这是将 p1
传递给 Console.WriteLine
时隐式调用 ToString()
的结果。
覆盖 class 中的 ToString()
方法:
public class Person
{
private string Fname;
private string Lname;
private int Id;
private override string ToString()
{
return string.Format("{0}, {1} {2}", Lname, Fname, Id);
}
...
...
}
您不能指望 C# 知道您希望对象输出的格式。您必须自己连接字符串才能生成输出。
最巧妙的方法是在 Person
上公开一个只读的 属性,按照您的需要格式化它,像这样:
public string DisplayName {
get {
return Lname + ", " + Fname + " " + Id;
}
}