Создание неизменяемой структуры коллекции из существующей иерархической структуры

#c# #immutability #readonly-collection

#c# #неизменность #только для чтения-коллекция

Вопрос:

У меня есть объект, который хранит иерархические данные. Я успешно смог создать нужную мне структуру из плоской структуры, но для этого мне пришлось использовать List<> то, что не является неизменяемым (я хочу использовать IReadOnlyList ).

Теперь я действительно не могу понять, как я мог бы создавать неизменяемые списки на основе этих дочерних списков. Кто-нибудь может направить меня в правильном направлении?

Класс выглядит следующим образом:

 public class ItemOrFolder
{
    public string Id { get; }

    public string Name { get; }

    public List<ItemOrFolder> Children { get; set; }    // Need to create immutable versions of these recursively

    private ItemOrFolder(string id, string name)
    {
        Id = id;
        Name = name;
    }

    public static ItemOrFolder Create(string id, string name)
    {
        return new ItemOrFolder(id, name);
    }
}
  

Если Children есть null , то это элемент, в противном случае это папка, содержащая ноль или более ItemOrFolder .

Ответ №1:

Я не могу найти, где установлено дочернее свойство, но вам просто нужно добавить .ToImmutableList() в свой список

 item.Children = yourList.ToImmutableList();