为什么不打印我的对象?

时间:2015-01-22 03:41:48

标签: c# object accessor

网站新手以及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;
    }
   }



   }

3 个答案:

答案 0 :(得分:2)

您的代码中存在一些问题。

首先,您不能将多个值传递给Console.WriteLine,如下所示:

Console.WriteLine(p1, p2);

一次做一个:

Console.WriteLine(p1);
Console.WriteLine(p2);

其次,您不能命名您的私人支持字段和用于获取/设置它的公共属性。你可以随意命名它们......通常私有变量以小写或下划线开头,但这取决于你。

一旦你解决了这些问题,你仍然会得到不寻常的输出,这实际上是你班级的完整命名空间。当您将ToString()传递给p1时,这是Console.WriteLine被隐式调用的结果。

覆盖班级中的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);
    }

    ...
    ...
}

答案 1 :(得分:1)

您需要访问方法的属性才能获得打印的值

错误的代码:

   Console.WriteLine(p1,p2); // You are trying to print Objects and this is wrong. !!

更正:使用附件可以打印输出。

   Console.WriteLine(p1.Fname); // Print first name "Max"

同样

   Console.WriteLine(p1.Lname); // print Last name
   Console.WriteLine(p1.Id);  // Print ID

此外,您的课程需要更正

  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);

答案 2 :(得分:0)

您不能指望C#知道您希望对象输出的格式。您必须自己连接字符串以生成输出。

最好的方法是在Person上公开一个readonly属性,根据你的需要进行格式化,如下所示:

public string DisplayName {
    get {
        return Lname + ", " + Fname + " " + Id;
    }
}