将List设置为ReadOnlyCollection或AsReadOnly的优点

Joh*_*ohn 4 c# data-structures

List<string> dinosaurs = new List<string>();
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");
Run Code Online (Sandbox Code Playgroud)
  1. 我为什么要使用ReadOnlyCollection如下:

    var readOnlyDinosaurs = new ReadOnlyCollection<string>(dinosaurs);
    
    Run Code Online (Sandbox Code Playgroud)

    代替:

    dinosaurs.AsReadOnly();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将List设置为ReadOnlyCollection或AsReadOnly的真正优势是什么?

Ser*_*rvy 8

一般来说,它们是相同的,正如欧文所提到的那样.有一个重要的案例,他们有所不同.因为该AsReadOnly方法是通用的,所以新创建的类型ReadOnlyCollection是不受欢迎的,没有具体列出.通常这只会为您节省一些打字,但在匿名类型的情况下,它确实很重要.如果您有一个需要使用的匿名对象列表AsReadOnly,而不是new ReadOnlyCollection<ATypeThatHasNoName>.


Erw*_*win 6

如果你看一下AsReadOnly()的代码没有区别:

public ReadOnlyCollection<T> AsReadOnly()
{
    return new ReadOnlyCollection<T>(this);
}
Run Code Online (Sandbox Code Playgroud)