Как возвратить копию только для чтения набора

Вы должны использовать форму обратного вызова setState:

this.setState((state, props) => ({
  ...state
  items: [...state.items, { id, eventName, time, data, owner }]
})

Эта версия вычисляет следующее состояние на основе текущего состояния - не на основе состояния в начале функции рендеринга, которое может быть «устаревшие» - и поэтому безопасно делать несколько обновлений таким образом.

13
задан Eric Anastas 12 May 2009 в 17:29
поделиться

4 ответа

Вы можете использовать List (T) .AsReadOnly () :

return this.mylist.AsReadOnly()

, который вернет ReadOnlyCollection .

26
ответ дан 1 December 2019 в 21:25
поделиться

Просто используйте класс ReadOnlyCollection, он поддерживается начиная с .NET 2.0

2
ответ дан 1 December 2019 в 21:25
поделиться

Используйте общий класс ReadOnlyCollection ( Collection.AsReadOnly () ). Он не копирует какие-либо объекты, которые могут иметь странные результаты при изменении базовой коллекции.

        var foo = new List<int> { 3, 1, 2 };
        var bar = foo.AsReadOnly();

        foreach (var x in bar) Console.WriteLine(x);

        foo.Sort();

        foreach (var x in bar) Console.WriteLine(x);

Но если вам не нужна копия, это лучшее решение.

0
ответ дан 1 December 2019 в 21:25
поделиться

Я предпочитаю возвращать IEnumerable, но вам не нужно приводить. Просто выполните

public IEnumerable<string> StringList { get { return myList; }

List - это IEnumerable

-2
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: