public static readonly field vs getter for a lookup list

时间:2013-08-09 03:35:04

标签: c# properties static readonly

我在两个查找(readonly)字符串列表的实现之间进行选择。

使用getter:

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

或者简单地说:

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

为简单起见,我会选择第二个,但只是从代码中读取它看起来像第二个实现每次都会创建一个新的List,而在第一个实现中则没有这样的重复开销。

这是考虑它的正确方法吗?或者是否有更好的实现我想要实现的目标?

谢谢!

1 个答案:

答案 0 :(得分: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"
    });