草庐IT

enumerators

全部标签

c# - 为什么在不修改枚举集合时得到 "Collection was modified; enumeration operation may not execute"?

这个问题在这里已经有了答案:Howtoremoveelementsfromagenericlistwhileiteratingoverit?(28个答案)关闭9年前。我有两个字符串集合:CollectionA是系统中存储的对象的StringCollection属性,而CollectionB是运行时生成的List。如果存在任何差异,则需要更新CollectionA以匹配CollectionB。因此,我设计了一个我期望的简单LINQ方法来执行删除。varstrDifferences=CollectionA.Where(foo=>!CollectionB.Contains(foo));for

c# - 即使是 "IsNullOrEmpty"检查也会给出 "Possible multiple enumeration of IEnumerable"警告

有一个questiononSOabout"possiblemultipleenumerations"已经,但这个问题更具体。请考虑以下方法,它需要一个IEnumerable作为输入并对其每个元素执行给定的方法:publicstaticboolSomeMethod(IEnumerableenumerable){if(enumerable.IsNullOrEmpty()){//throwexception.}else{return(enumerable.All(SomeBooleanMethod));}}在上面的代码中,IsNullOrEmpty只是一个运行的扩展方法return(!Ref

c# - 即使是 "IsNullOrEmpty"检查也会给出 "Possible multiple enumeration of IEnumerable"警告

有一个questiononSOabout"possiblemultipleenumerations"已经,但这个问题更具体。请考虑以下方法,它需要一个IEnumerable作为输入并对其每个元素执行给定的方法:publicstaticboolSomeMethod(IEnumerableenumerable){if(enumerable.IsNullOrEmpty()){//throwexception.}else{return(enumerable.All(SomeBooleanMethod));}}在上面的代码中,IsNullOrEmpty只是一个运行的扩展方法return(!Ref

c# - 为什么 Enumerable.Cast 引发 InvalidCastException?

如果我可以隐式地将整数值转换为double值,例如:inta=4;doubleb=a;//nowbholds4.0为什么我不能这样做:int[]intNumbers={10,6,1,9};double[]doubleNumbers2=intNumbers.Cast().ToArray();我收到“指定的转换无效”InvalidCastException异常。相反的操作(从double转换为int)会导致相同的错误。我做错了什么? 最佳答案 好吧,您对Cast的期望不正确,仅此而已-它旨在处理装箱/拆箱、引用和身份转换,仅此而已。不幸

c# - 为什么 Enumerable.Cast 引发 InvalidCastException?

如果我可以隐式地将整数值转换为double值,例如:inta=4;doubleb=a;//nowbholds4.0为什么我不能这样做:int[]intNumbers={10,6,1,9};double[]doubleNumbers2=intNumbers.Cast().ToArray();我收到“指定的转换无效”InvalidCastException异常。相反的操作(从double转换为int)会导致相同的错误。我做错了什么? 最佳答案 好吧,您对Cast的期望不正确,仅此而已-它旨在处理装箱/拆箱、引用和身份转换,仅此而已。不幸

c# - 为什么我要使用 Enumerable.ElementAt() 而不是 [] 运算符?

这似乎是一个愚蠢的问题,但我还没有找到答案,所以就在这里。:)在这两种情况下,如果您未能检查集合的边界,您将得到一个“超出范围”的异常。这只是编码风格偏好吗?如果有人需要示例:ListmyList=newList(){0x01,0x02,0x03};bytetestByte=myList.ElementAt(2);对比bytetestByte=myList[2]; 最佳答案 因为Enumerable更通用,用enumerable表示的集合可能没有索引器。但是,如果确实如此-不要使用ElementAt()它可能不会那么高效。

c# - 为什么我要使用 Enumerable.ElementAt() 而不是 [] 运算符?

这似乎是一个愚蠢的问题,但我还没有找到答案,所以就在这里。:)在这两种情况下,如果您未能检查集合的边界,您将得到一个“超出范围”的异常。这只是编码风格偏好吗?如果有人需要示例:ListmyList=newList(){0x01,0x02,0x03};bytetestByte=myList.ElementAt(2);对比bytetestByte=myList[2]; 最佳答案 因为Enumerable更通用,用enumerable表示的集合可能没有索引器。但是,如果确实如此-不要使用ElementAt()它可能不会那么高效。

c# - 关于使用 Enumerable.Range 与传统 for 循环的 foreach 的思考

在C#3.0中,我喜欢这种风格://Writethenumbers1thru7foreach(intindexinEnumerable.Range(1,7)){Console.WriteLine(index);}在传统的for循环上://Writethenumbers1thru7for(intindex=1;index假设“n”很小,所以性能不是问题,有没有人反对传统风格的新风格? 最佳答案 为此,我发现后者的“最小到最大”格式比Range的“最小计数”格式清晰得多。另外,我认为从不更快、不短、不熟悉、不明显更清晰的规范进行这样的更

c# - 关于使用 Enumerable.Range 与传统 for 循环的 foreach 的思考

在C#3.0中,我喜欢这种风格://Writethenumbers1thru7foreach(intindexinEnumerable.Range(1,7)){Console.WriteLine(index);}在传统的for循环上://Writethenumbers1thru7for(intindex=1;index假设“n”很小,所以性能不是问题,有没有人反对传统风格的新风格? 最佳答案 为此,我发现后者的“最小到最大”格式比Range的“最小计数”格式清晰得多。另外,我认为从不更快、不短、不熟悉、不明显更清晰的规范进行这样的更

c# - 为什么 Enumerable.All 对空序列返回 true?

这个问题在这里已经有了答案:WhydoesIQueryable.All()returntrueonanemptycollection?(11个答案)关闭6年前。varstrs=newCollection();boolb=strs.All(str=>str=="ABC");代码创建一个空的字符串集合,然后尝试确定集合中的所有元素是否都是“ABC”。如果您运行它,b将为真。但集合中甚至没有任何元素,更不用说任何等于“ABC”的元素了。这是一个错误,还是有合理的解释?