首页 > 解决方案 > 一种打印实例名称的方法

问题描述

我有一个班级人:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        return "Person: " + Name + " " + Age;
    }
}

在 Main 类中,我显示了该类的所有实例(人员)的详细信息:

    List<Person> itemsToPermute = new List<Person>();
    Person a = new Person { Name = "John", Age = 12 };
    Person b = new Person { Name = "Clara", Age = 57 };
    Person c = new Person { Name = "Martha", Age = 81 };
    Person d = new Person { Name = "Leon", Age = 23 };
    Person e = new Person { Name = "Rina", Age = 48 };

    itemsToPermute.Add(a);
    itemsToPermute.Add(b);
    itemsToPermute.Add(c);
    itemsToPermute.Add(d);
    itemsToPermute.Add(e);
    private static void Display(string prompt, List<Person> allPersons)
    {
        foreach (Person currentPerson in allPersons)
        {
            Console.WriteLine(currentPerson.ToString());
        }
    }

输出为: Person: John 12 Person: Clara 57 ... 等等。我还希望能够显示实例名称: Person: a John 12 有没有办法检索 a (实例名称)?这个问题的全部目的是了解 C# 中是否有办法以编程方式找出类实例的名称。先感谢您。

标签: c#classreflection

解决方案


我会使用 and for-loop 对所有元素进行迭代。然后你就直接得到了实例号。

例子:

class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public override string ToString()
        {
            return Name + " " + Age;
        }
    }

    private static void Display(List<Person> allPerson)
    {
        for (int i = 0; i < allPerson.Count; i++)
        {
            Console.WriteLine($"Person{i} "+allPerson[i].ToString());
        }
    }

如果您想以 1 开头的人号,您也可以将{i}更改为{i+1}


如果您想自动检测每件事(类名和列表中的当前索引)

foreach (Person currentPerson in allPerson)
        {
            int currentIndex = allPerson.IndexOf(currentPerson);
            Console.WriteLine($"{currentPerson.GetType().Name}: {currentPerson.GetType().Name}{currentIndex+1} {currentPerson}");
        }

推荐阅读