Способ напечатать название экземпляра - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть класс Person:

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

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

В Главном классе я отображаю подробности всех экземпляров этого класса (персон):

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

Вывод : Человек: Джон 12 Человек: Клара 57 ... и так далее. Я хотел бы также иметь возможность показать имя экземпляра: Person: a John 12 Есть ли способ получить a (имя экземпляра)? Вся цель этого вопроса состоит в том, чтобы узнать, существует ли в C# способ программным способом узнать имя экземпляра класса. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2020

Я бы использовал и для -l oop для итерации по всем элементам. Тогда у вас есть номер экземпляра напрямую.

Пример:

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

Вы также можете изменить {i} на {i + 1} , если хотите создать человека число на 1


, если вы хотите автоматически определять каждую вещь (ClassName и текущий индекс в списке)

foreach (Person currentPerson in allPerson)
        {
            int currentIndex = allPerson.IndexOf(currentPerson);
            Console.WriteLine($"{currentPerson.GetType().Name}: {currentPerson.GetType().Name}{currentIndex+1} {currentPerson}");
        }
1 голос
/ 04 апреля 2020

Экземпляр не имеет имени. У переменной есть имя, но объект не «знает», какие переменные ссылаются на него, и их может быть несколько. Например:

Person person1 = new Person { Name = "John", Age = 12 };
Person person2 = person1;

Теперь оба значения и person1, и person2 относятся к одному и тому же объекту - какое вы ожидаете от имени?

Как правило, если вы Если вы хотите сохранить некоторые дополнительные данные вместе с объектом, вы должны сделать это явно, как вы это сделали для Name и Age.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...