有时我在C#源代码中使用LINQ构造。我将VS 2010与ReSharper一起使用。现在,我从ReSharper收到“可能的IEnumerable多重枚举”警告。
我想根据最佳实践对其进行重构。简要介绍一下它的作用:
IEnumerable<String> codesMatching = from c in codes where conditions select c;
String theCode = null;
if (codesMatching.Any())
{
theCode = codesMatching.First();
}
if ((theCode == null) || (codesMatching.Count() != 1))
{
throw new Exception("Matching code either not found or is not unique.");
}
// OK - do something with theCode.
一个问题:
我应该首先将LINQ表达式的结果存储在列表中吗?
(我很确定它不会返回多于几行-最多说10行。)
任何提示表示赞赏。
谢谢
帕维尔
最佳答案
是的,您需要将结果存储为List \ Array,然后使用它。在这种情况下,它将不会枚举两次。
在您的情况下,如果您需要确保只有一个满足条件的项目,则可以使用Single
-如果存在多个满足条件的项目,则会抛出异常。如果根本没有任何项目,它也会引发异常。
而且您的代码将更容易:
string theCode = (from c in codes where conditions select c).Single();
但是在这种情况下,您无法更改异常文本,或者需要将其包装到自己的try \ catch块中,然后使用自定义文本\ exception将其重新抛出