Удаление n-ого элемента структуры c#

Вот структура которая состоит из имени и возраста человека. Как из нее удалить n-ый элемент и вывести структуру уже без него? Или можно только создать новую структуру и скопировать в нее все кроме n элемента?

public struct mans
        {
            public string name;
            public int age;

            public mans(string _name, int _age) : this()
            {
                this.name = _name;
                this.age = _age;
            }

        }
 static void Main(string[] args)
    {
         
            List<mans> man = new List<mans>();
            int m = 4;
            
            for(int i=0; i<m; i++)
            {
                string oneMan = Convert.ToString(Console.ReadLine());
                string[] wrMan = oneMan.Split(new char[] { ' ' });
                man.Add(new mans(wrMan[0], Convert.ToInt32(wrMan[1])));
            }
            for(int i=0; i<m; i++)
            {
                WriteLine(man[i].name + " " + man[i].age);
            }
        int n=Convert.ToInt32(Console.ReadLine());
    }

Ответы (1 шт):

Автор решения: aepot

Все смешалось...кони...люди...

  • Структура - это данные об одном человеке, так? Почему вы назвали этот тип mans? Ведь в переводе на русский было бы mans - это "люди", но нет такого слово в английском, есть people "люди" и men - "мужики". Если имеется в виду человек, персона, то и назовите тип Person. В C# типы - структуры и классы называют с большой буквы.

Структура будет выглядеть так.

public struct Person
{
    public string name;
    public int age;

    public Person(string _name, int _age)
    {
        name = _name;
        age = _age;
    }
}

Теперь код.

  • List<mans> man - список типа "мужики" вы называете "мужик", даже если не учитывать трудности перевода, все должно быть наоборот. Назовите persons.
  • Convert.ToString(Console.ReadLine()); преобразование string в string, это как закрашивать синее пятно синей ручкой в тетради. Совершенно бесполезно. Не втыкайте в код преобразования без причны.
  • Взаимодействуйте с пользователем, пишите ему, что надо делать. В противном случае можете сами же запутаться, забыв, на каком этапе сейчас выполнение кода.
  • Разбивайте код на методы. Вам ведь нужно вывести элементы, затем удалить из списка элемент и затем посмотреть изменения, так? Чтобы не писать один и тот же код дважды, создайте метод.
static void Main(string[] args)
{
    Console.Write("Сколько всего элементов: ");
    int count = int.Parse(Console.ReadLine());

    List<Person> persons = new List<Person>();

    for (int i = 0; i < count; i++)
    {
        Console.Write($"Введите элемент [{i}]: ");
        string input = Console.ReadLine();
        string[] tokens = input.Split();
        persons.Add(new Person(tokens[0], int.Parse(tokens[1])));
    }

    Console.WriteLine();
    PrintPersons(persons);

    Console.Write($"Индекс элемента для удаления (от 0 до {persons.Count - 1}): ");
    int n = int.Parse(Console.ReadLine());
    persons.RemoveAt(n);

    Console.WriteLine();
    PrintPersons(persons);
}

private static void PrintPersons(List<Person> persons)
{
    Console.WriteLine($"Всего элементов: {persons.Count}");
    for (int i = 0; i < persons.Count; i++)
    {
        Console.WriteLine($"{persons[i].name} {persons[i].age}");
    }
    Console.WriteLine();
}

Так код легче читается?

Вывод в консоль

Сколько всего элементов: 3
Введите элемент [0]: Вася 10
Введите элемент [1]: Федя 12
Введите элемент [2]: Настя 28

Всего элементов: 3
Вася 10
Федя 12
Настя 28

Индекс элемента для удаления (от 0 до 2): 1

Всего элементов: 2
Вася 10
Настя 28
→ Ссылка