如何从C#中的Object []中删除特定类型的变量

时间:2018-09-03 09:20:48

标签: c# arrays removeall

我有一个Objects类型的 array ,其中包含不同类的变量信息,例如ClassAClassB

public object[] SelectedObjects { get; }

现在我正在过滤ClassB的对象,这些对象需要从SelectedObjects的数组中删除。

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

当我执行Remove()RemoveAll()的操作时,它不执行任何操作

有人可以建议我如何执行此操作吗?

我需要删除ClassB的对象,因为在用户尝试突出显示画布上的对象时,一次只能显示ClassB的一个对象。首先删除ClassB对象,然后将新选择的ClassB对象添加到SelectedObjects[]

2 个答案:

答案 0 :(得分:3)

您无法从阵列中删除任何内容,需要创建一个新的数组。如果要排除类型为ClassB的对象,可以执行以下操作:

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

如果您想要可修改的集合,那么List<T>比数组是更好的选择。

答案 1 :(得分:2)

如果您坚持使用 array ,则可以明确地放置 backing字段

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

另一种可能性是将 array 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));