为什么我的对象不打印?

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