4
public class Foo
{
    public static List<long> myList = new List<long>() { 1,2,3 }
}

別の方法では:

var testList = Foo.myList;

最後の行にブレークポイントを置いて検査するtestListと、時々異なる長さが得られます。

ToList()onを使用するFoo.myListと、正しく動作するようです。しかし、なぜ?

編集:

私の問題は、ajax呼び出し>変更Foo.myList>新しいajax呼び出し>をFoo.myList再度フェッチして、変更された値を取得したことです。

4

2 に答える 2

8

共有状態での競合状態。静的フィールド メンバーは1 つのコピーがあることを意味するため、コード内でリストを操作すると、プロパティを使用してすべてのスレッドに対して変更されます。元のリストを変更しないリストのコピーToList()を作成するため機能しますが、オブジェクトが参照型の場合、このコピーも元のリストと同じオブジェクトを指すことに注意してください。したがって、コピーの参照型を変更すると、元のリストの値も変更されます...ただし、値の型であるため、ここでは適用されません。long

リストを読み取り専用にしたい場合http://msdn.microsoft.com/en-us/library/e78dcd75.aspx

于 2013-06-30T17:26:32.057 に答える