如何删除数组中的项目?
这就是我所拥有的,这不行。
// fr_watchdog.items = public array
string numToRemove = "test";
fr_watchdog.items = Array.FindAll(fr_watchdog.items,
val => val != numToRemove).ToArray();
全部完成。 我找到了解决这个问题的方法(如下所列)。是否可以删除问题?
ArrayList items = new ArrayList();
int index = Array.IndexOf(items, "Delete me");
if ( index != -1 )
{
string[] copyStrArr = new string[items.Length - 1];
for ( int i = 0; i < index; i++ )
{
copyStrArr[ i ] = items[ i ];
}
for ( int i = index ; i < copyStrArr.Length; i++ )
{
copyStrArr[ i ] = items[i + 1];
}
}
答案 0 :(得分:3)
你不能真正从数组中“删除”一个项目 - 你可以将一个元素的值设置为null(假设它是一个引用类型)但是数组的大小是固定的,所以你不能“删除”任何一个元素超过你可以“添加”一个。
您在问题中显示的内容会创建一个新数组 - 尽管实际上会创建两个数组,因为您在结果上调用了ToArray
,没有特别的原因。
鉴于你提到的.NET 2不包含LINQ to Objects,你甚至不清楚调用哪个ToArray
方法。你在使用LINQBridge吗?习惯的LINQ方式将是:
fr_watchdog.items = fr_watchdog.items.Where(val => val != numToRemove)
.ToArray();
但是,你已经说过“不行”而没有用什么方式说不好。它将创建一个新的数组,其中填充的值不是numToRemove
的值。以什么方式不是你想要的?
如果问题只是ToArray
方法不能正确,因为你使用的是没有LINQBridge的.NET 2,那么只需删除对ToArray()
的调用来自您原来的FindAll
代码。同样,请注意,这不会更改现有数组的内容 - 因此对该原始数组的任何其他引用仍将看到所有原始项。
答案 1 :(得分:0)
fr_watchdog.items
可以是只读属性(没有setter的属性)或只读字段(使用{{声明的字段) 1}}关键字)。如果是这种情况,则无法分配给它。