Для этого есть отчет: Реализация 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 ].
Если
BLOCKQUOTE>A
не содержит ровно один символ илиB
не содержит ровно один символ, выведите исключениеSyntaxError
.
Необходимо реализовать INotifyCollectionChanged также, и затем он должен все работать хорошо. Существует другой релевантный ТАК ответ, который использует freezables, чтобы гарантировать, что изменения в базовых объектах также обрабатываются.
Я не знаю, поможет ли это, но здесь является действительно простой реализацией "заметного набора", который я сделал для персонального проекта. Это по существу принимает меры против вставки (или перезапись с) объект, который уже находится в наборе.
Если бы Вы хотели Вам, то мог бы просто возвратиться из методов вместо того, чтобы выдать исключение.
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);
}
}