Как удалить переменную Specific Type из объекта [] в C # - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть массив типа Objects, который имеет информацию о переменных различных классов, скажем, ClassA и ClassB.

public object[] SelectedObjects { get; }

Теперь я фильтрую объекты ClassB, которые мне нужно удалить из массива SelectedObjects.

var selectedClassBObjects = SelectedObjects.OfType<ClassB>().ToList();

Когда я выполняю операцию Remove() или RemoveAll(), ничего не делает .

Может кто-нибудь подсказать, как выполнить эту операцию?

Мне нужно удалить объекты ClassB, потому что одновременно может присутствовать только один объект ClassB, когда пользователь пытается выделить объекты на холсте. Сначала удалите объекты ClassB, затем добавьте вновь выбранные объекты ClassB в SelectedObjects[].

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Если вы настаиваете на массиве , вы можете явно указать поле :

private object[] m_SelectedObjects = new object[0];

public object[] SelectedObjects {
  get {
    return m_SelectedObjects;
  }
}

private void MyRemove() {
  // We can't modify read-only property but can operate with its backing field 
  m_SelectedObjects = m_SelectedObjects?.OfType<ClassB>()?.ToArray();
}

Другая возможность - изменить массив object[] на List<object>:

public List<object> SelectedObjects { get; }

...

// We still can't assign SelectedObjects but we can modify the collection now
SelectedObjects?.RemoveAll(item => !(item is TypeB));
0 голосов
/ 03 сентября 2018

Вы не можете ничего удалить из массива, вам нужно будет создать новый. Если вы хотите исключить объекты типа ClassB, вы можете сделать:

SelectedObjects = SelectedObjects.Where(x => !(x is ClassB)).ToArray();

Если вы хотите изменить коллекцию, List<T> - лучший выбор, чем массив.

...