Tag: ienumerable

在List – C#中选择整周没有rest日的记录

我有一个Employee类,定义如下: Employee { public int Id { get; set; } public string Name { get; set; } public DateTime WorkDate { get; set; } public bool isOff { get; set; } } 这是我的类实现和用法: List workers = new List() { new Employee { Id = 1, Name = “Emp 1”, WorkDate = Convert.ToDateTime(“4/11/2016”), IsOff = false}, […]

IEnumerable的默认具体类型是什么

(对不起,标题模糊;没想到更好。请随意改写。) 所以假设我的函数或属性返回一个IEnumerable : public IEnumerable Adults { get { return _Members.Where(i => i.Age >= 18); } } 如果我在这个属性上运行foreach而没有实际实现返回的可枚举: foreach(var Adult in Adults) { //… } 是否存在一个规则来控制IEnumerable是否将实现为数组或列表或其他内容? 将Adults为List或Array而不调用ToList()或ToArray()吗? 编辑 许多人花了很多精力回答这个问题。 感谢他们所有人。 然而,这个问题的要点仍然没有答案。 让我详细介绍一下: 我知道foreach不要求目标对象是数组或列表。 它甚至不需要是任何类型的集合。 它需要的目标对象就是实现枚举。 但是,如果我检查目标对象的值,它会显示实际的底层对象是List (就像它在检查一个盒装的字符串对象时显示object (string) )。 这就是混乱开始的地方。 谁进行了这种实现? 我检查了底层( Where()函数的源),看起来这些函数看起来并不像这样。 所以我的问题在于两个层面。 第一个是纯粹的理论。 与物理学和生物学等许多其他学科不同,在计算机科学中,我们总是清楚地知道某些东西是如何起作用的(回答@zzxyz的最后评论); 所以我试图挖掘创建List的代理以及它如何决定它应该选择List而不是Array以及是否有一种方法可以从我们的代码中影响该决策。 我的第二个原因是实际的。 我可以依赖实际底层对象的类型并将其强制转换为List吗? 我需要使用一些Listfunction,我想知道是否例如((List)Adults).BinarySearch()和Adults.ToList().BinarySearch()一样安全Adults.ToList().BinarySearch() ? 我也明白即使我明确地调用ToList()也不会造成任何性能损失。 我只是想了解它是如何工作的。 无论如何,再次感谢时间; 我想我花了太多时间。

甚至“IsNullOrEmpty”检查也会给出“可能多次枚举IEnumerable”的警告

关于“可能存在多个枚举”的SO有一个问题 ,但这个问题更具体。 请考虑以下方法,该方法将IEnumerable作为输入并对其每个元素执行给定方法: public static bool SomeMethod(IEnumerable enumerable) { if (enumerable.IsNullOrEmpty()) { // throw exception. } else { return (enumerable.All(SomeBooleanMethod)); } } 在上面的代码中, IsNullOrEmpty只是一个运行的扩展方法 return (!ReferenceEquals(enumerable, null) || enumerable.Any()); 问题是ReSharper警告我“IEnumerable的可能的多个枚举”,我真的不知道这是否真的是一个问题。 我理解警告的含义,但是如果你确实需要在无效或空洞的情况下检查并抛出exception,那么在这种情况下你真的能做些什么呢?

对集合中的所有对象运行方法

所以我有一系列由一系列Bloops创建的Razzies。 我使用Linq查询检索此集合。 参考: Linq选择某些属性到另一个对象? 用于查询。 我想知道是否可以在返回集合之前在所有新创建的Razzies上运行一个方法,或者甚至在不使用for循环之后立即运行。 我试过这个: Dim results = From item In bloops _ Select New Razzie() With _ { _ .FirstName = item.FirstName, _ .LastName = item.LastName _ }.UpdateAddress(item.Address) 但它什么也没有回报。

如何使用Aggregate()将几个独立的LINQ查询重写为单个查询?

我有下一个非优化的代码: void Summarize(IEnumerable sections) { this.DateBegin = sections.Select(s => s.Date).Min(); this.DateEnd = sections.Select(s => s.Date).Max(); this.Income = sections.Where(s => s.IsIncome).Sum(r => r.Amount); this.ExpenditureBank = sections.Where(s => s.IsExpenditureBank).Sum(r => r.Amount); this.ExpenditureClient = sections.Where(s => s.IsExpenditureClient).Sum(r => r.Amount); this.Expenditure = this.ExpenditureBank + this.ExpenditureClient; } 如果适用,如何使用IEnumerable.Aggregate()重写它?

为什么我在迭代时不应该修改集合

我知道.net集合类型(或至少一些集合类型)不允许在迭代时修改集合。 例如,在List类中存在如下代码: if (this.version != this.list._version) ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion); 但显然这是设计迭代器类的开发人员的决定,因为我可以提供IEnumerable一些实现,至少在修改底层集合时不抛出任何exception。 然后我有一些问题: 为什么我在迭代时不应修改集合? 可以创建一个支持在迭代时进行修改的集合,而不会有任何其他问题吗? (注意:第一个答案也可以回答这个问题) 当C#编译器生成Enumerator接口实现时考虑到这样的事情?

当我上传0个文件时,为什么IEnumerable count为1?

我有一个多上传表单,我想在启动上传时检查是否有任何文件。 这是我的代码。 查看: @using (Html.BeginForm(“Upload”, “Home”, FormMethod.Post, new { enctype = “multipart/form-data”})) { } 控制器: [HttpPost] public ActionResult Upload(IEnumerable files) { if (files.Count() > 0) Console.WriteLine(files.Count()); // display 1 if(files.Any()) Console.WriteLine(files.Any()); // display true if (files.First() == null) Console.WriteLine(“first null”); // display “first null” return View(); } 当我提交空表单时,为什么我的程序会显示结果? 我可能会检查JS我的字段,但我想了解我的IEnumerable这些数据是什么。 谢谢。

XmlSerializer不会序列化我class级中的所有内容

我有一个非常基本的类,它是一个子类列表,加上一些摘要数据。 [Serializable] public class ProductCollection : List { public bool flag { get; set; } public double A { get; set; } public double B { get; set; } public double C { get; set; } } … // method to save this class private void SaveProductCollection() { // Export case as XML… XmlSerializer xml […]

IEnumerable 到Stream for FileStreamResult

我有一个IEnumerable ,它是一个方法的每个yield语句的“流”。 现在我想将此枚举转换为Stream以将其用作流式结果。 我有什么想法可以做到这一点? 我最终想要做的是从ASP.NET控制器操作返回Stream作为FileStreamResult 。 此结果应作为下载流式传输到客户端。 我不想做的是在返回结果之前将IEnumerable的全部内容写入流。 这将消除整个流媒体概念的意义。

C#:当字段不为空时返回IEnumerable?

public IEnumerable GetAddress() { DataSet ds = DataOps.GetDataSet(string.Format(” select * from Students”)); DataTable dt = ds.Tables[0]; // What goes here? } 我需要使用IEnumerable方法 如何返回包含仅具有地址的所有学生的DataRows枚举?