我在两个查找(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,而在第一个实现中则没有这样的重复开销。
这是考虑它的正确方法吗?或者是否有更好的实现我想要实现的目标?
谢谢!
答案 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"
});