9

是否有一个函数可以让您将元素添加到 aList<T>int返回索引?List<T>.Add()是 avoid并且不返回值。

List.Count-1当您不使用线程时,这是一个解决方案。我的列表是一个静态成员,一次可以使用多个线程访问,使用 count-1 值完全是线程不安全的,很容易导致错误的结果。

该索引将用于对每个元素进行特定处理。

谢谢!

4

3 回答 3

13

List 的方法不是单独的线程安全的;如果您只是List.Add从多个线程重复调用,您很可能会遇到问题。如果您首先要使用 a List,则需要使用某种同步技术,因此您不妨List.Count在该关键部分内部包含一个调用。

您的另一个选择是使用设计为供多个线程使用的集合,例如System.Collections.Concurrent.

于 2012-10-17T14:51:07.880 回答
0

如果你想要一个线程安全的索引,你需要锁定,因为即使你有索引,人们也可能删除了一个项目/更改了列表。

也就是说,您可以尝试 list.IndexOf(value) 返回值的索引(假设所有元素都是唯一的)

于 2012-10-17T14:50:52.097 回答
-2

我相信列表有一个 indexOf() 方法,因此您可以在将元素添加到列表后调用它,如下所示:

list.add(element);
int index = list.indexOf(element);
于 2012-10-17T14:50:58.717 回答