因此,我尝试为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并不存在于紧凑的框架中。
发布于 2011-09-29 23:48:07
我认为您的代码在FxCop中触发了一个bug,"Collection被修改了“是一个典型的oops。然后,它决定它的错误是您的问题,捕获(异常)风格。
寻找最新消息。我使用的代码不抱怨您的代码(VS2010版本)。
https://stackoverflow.com/questions/7604449
复制相似问题