2

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

使用吸气剂:

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,而在第一个实现中没有这样的重复开销。

这是正确的思考方式吗?或者我想要实现的目标有更好的实现吗?

谢谢!

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 回答