9

List<T>に要素を追加してインデックスを元に戻すことができる関数はありますintか?List<T>.Add()はavoidであり、値を返しません。

List.Count-1スレッドを使用していない場合の解決策です。私のリストは静的メンバーであり、一度に複数のスレッドでアクセスできます。count-1値を使用することは完全にスレッドセーフではなく、間違った結果につながる可能性があります。

インデックスは、各要素の特定の処理に使用されます。

ありがとうございました!

4

3 に答える 3

13

リストのメソッドは、単独ではスレッドセーフではありません。複数のスレッドから繰り返し呼び出すとList.Add、問題が発生する可能性があります。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 に答える