我有一个Objects
类型的 array ,其中包含不同类的变量信息,例如ClassA
和ClassB
。
public object[] SelectedObjects { get; }
现在我正在过滤ClassB
的对象,这些对象需要从SelectedObjects
的数组中删除。
var selectedClassBObjects = SelectedObjects.OfType<ClassB>().ToList();
当我执行Remove()
或RemoveAll()
的操作时,它不执行任何操作。
有人可以建议我如何执行此操作吗?
我需要删除ClassB
的对象,因为在用户尝试突出显示画布上的对象时,一次只能显示ClassB
的一个对象。首先删除ClassB
对象,然后将新选择的ClassB
对象添加到SelectedObjects[]
。
答案 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));