Tag: ienumerable

如何将两种类型的C#列表合并为一个?

我创建了两个名为X&Y的列表。这两个列表的类型不同。 (即List X & List Y )。 这两个列表中的值都不同。 但是这两个列表中都有一个DateTime字段。 我需要根据date字段对这些列表进行排序。 我有单独的函数来打印列表A和列表B的详细信息。 假设排序列表看起来像 列表A中的元组, 列表B中的元组, 列表A中的元组, 列表B中的元组, 我的目的是遍历此列表并调用相应的函数来显示详细信息。 即,如果元组来自列表A,则调用函数打印列表A的详细信息,反之亦然。

将单个实例对象作为IEnumerable返回

我有类foo的例子,我想把它作为IEnumerable返回。 我可以在不创建新列表等的情况下完成此操作。 也许类似如下: IEnumerable.fromInstance(foo)

将一个项添加到IEnumerable 的最佳方法是什么?

这是我如何将一个项添加到IEnumerable对象: //Some IEnumerable object IEnumerable arr = new string[] { “ABC”, “DEF”, “GHI” }; //Add one item arr = arr.Concat(new string[] { “JKL” }); 这很尴尬。 我没有看到像ConcatSingle()这样的方法。 有没有更简洁的方法将单个项添加到IEnumerable对象?

使用IDataReader作为IEnumerable 的最佳方法?

我需要在任何像这样的IDataReader实现上使用Linq var c = sqlDataReader.AsEnumerable().Count(); 例: public abstract class Test { public abstract SqlDataReader GetSqlDataReader(); public void Foo() { SqlDataReader sqlDataReader = GetSqlDataReader(); IEnumerable sqlEnumerable = sqlDataReader.AsEnumerable(); var c = sqlEnumerable.Count(); var s = sqlEnumerable.Sum(); SqlDataReader first = sqlEnumerable.First(); var t = first.GetSqlXml(10); } } 写这个的最好方法是什么。 请写下你的代码片段。

有关IEnumerable和IEnumerator的问题

我使用以下代码使myClass使用foreach。 但我对编程很新,并且在理解下面的代码时遇到一些困难。 我在评论中描述了我的问题。 我很感激提供一些信息。 public class MyClass : IEnumerable { //1) What is IEnumerator for? // Whats the difference between IEnumerator and IEnumerable public IEnumerator GetEnumerator() { yield return “first”; yield return “second”; } //2) What is it for? It just calls above method IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } //3) Lastly what benefits […]

如何获得IEnumerable的第一个元素

是否有更好的方法来获取IEnumerable类型的第一个元素: foreach (Image image in imgList) { picture.Width = (short)image.Columns; picture.Height = (short)image.Rows; break; } 这是类型的确切声明: public class ImageList : IEnumerable, IDisposable

为什么我不能使用数组的枚举器,而不是自己实现它?

我有一些像这样的代码: public class EffectValues : IEnumerable { public object [ ] Values { get; set; } public IEnumerator GetEnumerator ( ) { return this.Values.GetEnumerator ( ); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( ) { return this.GetEnumerator ( ); } } 但编译器抱怨说: “无法将类型’System.Collections.IEnumerator’隐式转换为’System.Collections.Generic.IEnumerator’。存在显式转换(您是否错过了转换?)” 我以为Array类型实现了IEnumerable接口,不是吗? 因为我可以直接在Values实例上使用Linqfunction。

LINQ查询执行投射,跳过或包装exception,其中源抛出IEnumerable.GetNext()

我想要一个通用的解决方案,但作为一个例子,假设我有一个IEnumerable ,其中一些可以解析为整数,有些则不能。 var strings = new string[] { “1”, “2”, “notint”, “3” }; 显然,如果我做了Select(s => int.Parse(s, temp))它会在枚举时抛出exception。 在这种情况下,我可以先.All(s => int.TryParse(s, out temp)) ,但我想要一个通用的解决方案,我不必枚举IEnumerable两次。 理想情况下,我希望能够执行以下操作,它调用我的魔术exception跳过方法: // eg parsing strings var strings = new string[] { “1”, “2”, “notint”, “3” }; var numbers = strings.Select(s => int.Parse(s)).SkipExceptions(); // eg encountering null object var objects = new object[] […]

是否有IEnumerable实现只迭代它的源(例如LINQ)一次

提供的items是q LINQ表达式的结果: var items = from item in ItemsSource.RetrieveItems() where … 假设每个项目的生成需要一些不可忽略的时间。 有两种操作模式: 使用foreach将允许开始使用集合开头的项目,而不是最终可用的项目。 但是,如果我们想稍后再次处理相同的集合,我们将不得不复制保存它: var storedItems = new List(); foreach(var item in items){ Process(item); storedItems .Add(item); } // Later foreach(var item in storedItems){ ProcessMore(item); } 因为如果我们只是做了foreach(… in items)那么temsSource.RetrieveItems()将再次被调用。 我们可以在前面使用.ToList() ,但这会迫使我们在开始处理第一个项目之前等待检索最后一个项目。 问题 :是否存在IEnumerable实现,它将像常规LINQ查询结果一样首次迭代,但会在进程中实现,以便第二个foreach将迭代存储的值?

IEnumerable.Select with index

我有以下代码: var accidents = text.Skip(NumberOfAccidentsLine + 1).Take(numberOfAccidentsInFile).ToArray(); 事故是一系列的字符串。 我想从字符串数组到Accident对象数组进行Linq转换,如下所示: return accidents.Select(t => new Accident() {Id = i, Name = t.Replace(“\””, string.Empty)}).ToArray(); 如何使用Linq从事故arrays中检索索引i还是我必须上学?