2

I'm choosing between two implementations for a lookup (readonly) list of strings.

With getter:

public static List<string> MyList { get { return myList; } }
private static readonly List<string> myList = new List<string>
{
    "Item 1", "Item 2", "Item 3"
};

Or simply:

public static readonly List<string> MyList = new List<string>
{
    "Item 1", "Item 2", "Item 3"
};

I would go for the second one for simplicity, but just reading from the code it looks like the second implementation will create a new List every time, whereas in the first implementation there's no such recurring overhead.

Is that the right way to think about it? Or are there better implementations for what I am trying to achieve?

Thanks!

4

1 に答える 1

4

個人的には、より柔軟なプロパティを使用することをお勧めします。たとえば、プロパティの背後にあるコレクションの遅延読み込みを実装できますが、これはフィールドでは実行できません。

ただし、コードにはもっと大きな問題があります。読み取り専用フィールドと読み取り専用プロパティのみを使用すると、参照MyListを別のリストに再割り当てできなくなります。ただし、これらのオプションのどちらも実際にはリスト自体を読み取り専用にしないことに注意してください。

どちらの場合も、他のコードの呼び出しを止めるものは何もありません:

MyClass.MyList.Clear();
MyClass.MyList.Add("Foo");

次のようなことを強くお勧めします。

public static IList<string> MyList { get { return myList; } }
private static readonly ReadOnlyCollection<string> myList = 
    new ReadOnlyCollection<string>(new[]
    {
        "Item 1", "Item 2", "Item 3"
    });
于 2013-08-09T03:39:42.223 に答える