Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中显示对象名称?_C#_.net_Console - Fatal编程技术网

C# 如何在C中显示对象名称?

C# 如何在C中显示对象名称?,c#,.net,console,C#,.net,Console,如何显示对象实例的引用变量名 我想显示以下内容 约翰有以下汽车: 梅赛德斯 普拉多 这是我的密码。我怎样才能解决这个问题 class Program { static void Main(string[] args) { Person John = new Person(); Car mercedes = new Car(); Car prado = new Car();

如何显示对象实例的引用变量名

我想显示以下内容

约翰有以下汽车:

梅赛德斯

普拉多

这是我的密码。我怎样才能解决这个问题

class Program
{
        static void Main(string[] args)
        {
            Person John = new Person();
            Car mercedes = new Car();
            Car prado = new Car();
            John.AddCar(mercedes);
            John.AddCar(prado);

            Console.WriteLine("John has the following cars:");
            foreach (Car car in John.Cars)
            {
                Console.WriteLine(nameof(car));   // not working
            }
        }
}

class Person
{
        public List<Car> Cars { get; set; } = new List<Car>();

        public void AddCar(Car arg)
        {
            arg.Owner = this;
            Cars.Add(arg);
        }

}

class Car
{    
        public Person Owner { get; set; }    
}

只需将name属性添加到汽车:

class Car
{    
    public Person Owner { get; set; } 
    public string Name {get; set;}   
}

Car mercedes = new Car {Name = "Mercedes"};
John.AddCar(mercedes);
John.AddCar(new Car { Name = "Prado" });

foreach (Car car in John.Cars)
{
     Console.WriteLine(car.Name);   // not working
}

您应该将模型或其他内容作为属性添加到您的汽车类中:

class Car
{   
    public Car(string model)
    {
        this.Model = model;
    }

    public string Model { get; set; }
    public Person Owner { get; set; }    
}
然后像这样构造你的人:

Person John = new Person();
John.AddCar(new Car("mercedes"));
John.AddCar(new Car("prado"));
foreach (Car car in John.Cars)
{
    Console.WriteLine(car.Model);
}
并按如下方式打印输出:

Person John = new Person();
John.AddCar(new Car("mercedes"));
John.AddCar(new Car("prado"));
foreach (Car car in John.Cars)
{
    Console.WriteLine(car.Model);
}
简言之:作为一名程序员,变量名应该用于帮助您以一种让您轻松读回代码的方式编写代码。它一般不应用于面向用户的输出


nameof是在编译时执行的一种方便工具,对于错误消息等非常有用。它不跟随列表等中的变量。因此,当您在John.Cars中为每辆车执行操作时,变量名为Car。

通过向车添加制造商、型号或类似属性。您当前的方法不正确。我们需要知道什么不起作用。是否引发异常?编译器错误?它打印的是car而不是prado或Mercedesy你在John中看到foreach car car中的car变量。Cars与mersedes或prado的变量不同,car对它们一无所知。我提供了与Ashkan基本相同的答案,但提供了更多信息,我得到了一张反对票,而他得到了两张赞成票,一张来自我。这似乎合乎逻辑。@myotura您还可以覆盖ToString,例如public override string ToString{return Model;},这样您就可以编写Console.WriteLinecar;。提供适当的ToString方法也有助于在调试期间轻松识别实例。