Как удалить элемент из массива struct в C#

#c# #arrays #visual-studio-2008

#c# #массивы #visual-studio-2008

Вопрос:

У меня есть структура в C #, и я определяю список массивов моей структуры на основе моего кода, который я выражаю здесь. Я добавляю элементы в свой список массивов, но мне также нужно удалить несколько строк из моего списка. Не могли бы вы мне помочь, как я могу удалить элемент или элементы из моего списка struct array:

 public struct SwitchList
    {
        public int m_Value1, m_Value2;
        public int mValue1
        {
            get  { return m_Value1;  }
            set  {m_Value1 = value; }
        }

        public int mValue2
        {
            get  { return m_Value2;  }
            set  {m_Value2 = value; }
        }       
   }

   //Define an array list of struct
   SwitchList[] mSwitch = new SwitchList[10]; 

   mSwitch[0].mValue1=1;
   mSwitch[0].mValue2=2;

   mSwitch[1].mValue1=3;
   mSwitch[1].mValue2=4;

   mSwitch[2].mValue1=5;
   mSwitch[2].mValue2=6;
  

Теперь, как я могу удалить один из моих элементов, например, элемент 1.
Спасибо.

Комментарии:

1. вы должны попробовать дженерики

Ответ №1:

Массивы — это структуры данных фиксированной длины.

Вам нужно будет создать новый массив размером на единицу меньше исходного и скопировать в него все элементы, кроме того, который вы хотите удалить, и начать использовать новый массив вместо исходного.

Почему бы не использовать List<T> вместо этого? Это динамическая структура, которая позволяет добавлять и удалять элементы.

Ответ №2:

Вам нужно будет перемещать элементы и изменять размер массива (что дорого), поскольку здесь есть некоторая сложность, вы захотите скрыть это в классе, который просто представляет коллекцию, не раскрывая детали реализации того, как она хранится. К счастью, Microsoft уже предоставила класс, который делает именно это, под названием List<T> , который наряду с несколькими другими типами коллекций в System.Collections.Generic пространстве имен удовлетворяет наиболее распространенным потребностям в сборе.

в качестве дополнительного примечания вам следует использовать автоматические свойства вместо тривиального стиля свойств, который вы использовали

Ответ №3:

Это невозможно, потому что массив представляет собой блок элементов фиксированного размера. Поскольку структуры являются типами значений, а не ссылочными типами, вы также не можете просто присвоить элементу zo значение null. Одним из вариантов было бы создать новый массив меньшего размера и скопировать оставшиеся значения в новый массив. Но, на мой взгляд, лучшим подходом было бы использовать список.

Ответ №4:

Если вы действительно, действительно хотите использовать массивы и перемещать объекты, вот несколько примеров того, как это сделать:

 {
    // Remove first element from mSwitch using a for loop.
    var newSwitch = new SwitchList[mSwitch.Length - 1];
    for (int i = 1; i < mSwitch.Length; i  )
        newSwitch[i - 1] = mSwitch[i];
    mSwitch = newSwitch;
}
{
    // Remove first element from mSwitch using Array.Copy.
    var newSwitch = new SwitchList[mSwitch.Length - 1];
    Array.Copy(mSwitch, 1, newSwitch, 0, mSwitch.Length - 1);
    mSwitch = newSwitch;
}