Как я могу сделать Заметный Hashset в C#?

Для этого есть отчет: Реализация V8: унаследовано ли свойство юникода в диапазоне классов символов преднамеренно? .


Я взглянул на исходный код V8 ( regexp-parser.cc ) и нашел это:

if (is_class_1 || is_class_2) {
    // Either end is an escaped character class. Treat the '-' verbatim.
    if (unicode()) {
       // ES2015 21.2.2.15.1 step 1.
       return ReportError(CStrVector(kRangeInvalid));
    }

kRangeInvalid - константа, которая содержит [112 ].

21.2.2.15.1 шаг 1.

Если A не содержит ровно один символ или B не содержит ровно один символ, выведите исключение SyntaxError.

BLOCKQUOTE>

16
задан wonea 15 February 2017 в 15:58
поделиться

2 ответа

Необходимо реализовать INotifyCollectionChanged также, и затем он должен все работать хорошо. Существует другой релевантный ТАК ответ, который использует freezables, чтобы гарантировать, что изменения в базовых объектах также обрабатываются.

11
ответ дан 30 November 2019 в 16:42
поделиться

Я не знаю, поможет ли это, но здесь является действительно простой реализацией "заметного набора", который я сделал для персонального проекта. Это по существу принимает меры против вставки (или перезапись с) объект, который уже находится в наборе.

Если бы Вы хотели Вам, то мог бы просто возвратиться из методов вместо того, чтобы выдать исключение.

public class SetCollection<T> : ObservableCollection<T> 
{
    protected override void InsertItem(int index, T item)
    {
        if (Contains(item)) throw new ItemExistsException(item);

        base.InsertItem(index, item);
    }

    protected override void SetItem(int index, T item)
    {
        int i = IndexOf(item);
        if (i >= 0 && i != index) throw new ItemExistsException(item);

        base.SetItem(index, item);
    }
}
15
ответ дан 30 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

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