Итак, я попытался создать несколько базовых методов расширения для List
.По сути, у меня есть UniqueAdd и UniqueAddRange.Он будет проверять наличие значения перед добавлением и, если оно уже есть в списке, не будет добавлять его.Вот код:
public static class ListExtensions
{
/// <summary>
/// Adds only the values in the 'values' collection that do not already exist in the list. Uses list.Contains() to determine existence of
/// previous values.
/// </summary>
/// <param name="list"></param>
/// <param name="values"></param>
public static void UniqueAddRange<T>(this List<T> list, IEnumerable<T> values)
{
foreach (T value in values)
{
list.UniqueAdd(value);
}
}
/// <summary>
/// Adds the value to the list only if it does not already exist in the list. Uses list.Contains() to determine existence of previos values.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="value"></param>
public static void UniqueAdd<T>(this List<T> list, T value)
{
if (!list.Contains(value))
{
list.Add(value);
}
}
}
И я получаю следующую ошибку при сборке:
CA0001 : Rule=Microsoft.Maintainability#CA1506, Target=Some.Namespace.ListExtensions : Collection was modified; enumeration operation may not execute.
Вот ссылка на ошибку, но я неуверен, как исправить мои методы расширения, учитывая эту информацию.Это говорит
Попробуйте изменить тип или метод, чтобы уменьшить количество типов, с которыми он связан.
Кто-нибудь знает, почему я получаю эту ошибкуи как исправить мои методы расширения, чтобы они не нарушали это правило?
Спасибо!
PS: Прежде чем кто-либо упоминал об этом, я рассмотрел использование HashSet, но HashSet не существует в компактрамки.