草庐IT

c# - IEnumerable<T>.ToArray() 是如何工作的?

它是二次通过算法吗?即,它迭代可枚举一次以计算元素的数量,以便它可以分配数组,然后再次传递以插入它们?它是否循环一次,并不断调整数组的大小?或者它是否使用像List这样的中间结构(可能在内部调整数组的大小)? 最佳答案 它使用中间结构。实际涉及的类型是Buffer,它是框架中的内部结构。在实践中,这种类型有一个数组,每次它被复制以分配更多空间。这个数组以4的长度开始(在.NET4中,它是一个可能会改变的实现细节),所以在执行ToArray时你可能最终会分配和复制很多。不过,这里有一个优化。如果源实现ICollection,它使用Co

c# - 使用 Linq 从列表中删除与属性相交的项目

我有2个不同对象的列表(foo和bar),它们共享相同的属性,我们称它为id。publicListfoo{get;set;}publicListbar{get;set;}我想从foo中删除所有对象,这些对象的ID在bar中不存在如何在linq中完成此操作?我一直在查看Intersect、RemoveAll和Join,但找不到列表属于不同类型的任何示例。 最佳答案 试试这个:foo.RemoveAll(x=>!bar.Any(y=>y.Id==x.Id));!bar.Any(y=>y.Id==x.Id)将获取项目是否在bar集合中,如

c# - 使用 Linq 从列表中删除与属性相交的项目

我有2个不同对象的列表(foo和bar),它们共享相同的属性,我们称它为id。publicListfoo{get;set;}publicListbar{get;set;}我想从foo中删除所有对象,这些对象的ID在bar中不存在如何在linq中完成此操作?我一直在查看Intersect、RemoveAll和Join,但找不到列表属于不同类型的任何示例。 最佳答案 试试这个:foo.RemoveAll(x=>!bar.Any(y=>y.Id==x.Id));!bar.Any(y=>y.Id==x.Id)将获取项目是否在bar集合中,如

c# - 如果没有空格分隔符,为什么 XmlReader 会跳过所有其他元素?

当我尝试使用LINQXmlReader类解析XML时,我看到了奇怪的行为。下面的测试用例:看起来我是否使用了(XElement)XNode.ReadFrom(xmlReader)或Read()之一XmlReader上的方法,它错过了第二个bar输入XML中的元素。如果在之间添加了任何空格和然后它将解析第二个bar元素正确。有没有人知道输入流为什么会困惑以及如何解决这个问题?[Test][Explicit]publicvoidShouldParseCorrectNumberOfElements(){varxml=@"wtfwtf2";XmlReaderxmlReader=XmlReade

c# - 如果没有空格分隔符,为什么 XmlReader 会跳过所有其他元素?

当我尝试使用LINQXmlReader类解析XML时,我看到了奇怪的行为。下面的测试用例:看起来我是否使用了(XElement)XNode.ReadFrom(xmlReader)或Read()之一XmlReader上的方法,它错过了第二个bar输入XML中的元素。如果在之间添加了任何空格和然后它将解析第二个bar元素正确。有没有人知道输入流为什么会困惑以及如何解决这个问题?[Test][Explicit]publicvoidShouldParseCorrectNumberOfElements(){varxml=@"wtfwtf2";XmlReaderxmlReader=XmlReade

c# - 模拟 Linq2Sql DataContext

我有一个Lin2SqlDataContext,我正在使用它从sql数据库中获取我的所有数据,但是我正在努力寻找一种方法来成功模拟它,以便我可以创建相关的单元测试。在我想要测试的数据访问对象中,我每次都刷新上下文,我发现很难找到一种简单合适的方法来模拟它。如有任何帮助,我们将不胜感激。 最佳答案 模拟linq-to-sql上下文确实是一项艰巨的任务。我通常通过让我的单元测试针对单独的数据库副本运行来解决这个问题,并使用特制的数据来适应单元测试。(我知道可以说它不再是单元测试,而是集成测试,但我不在乎,只要我测试了代码即可)。为了使数据

c# - 模拟 Linq2Sql DataContext

我有一个Lin2SqlDataContext,我正在使用它从sql数据库中获取我的所有数据,但是我正在努力寻找一种方法来成功模拟它,以便我可以创建相关的单元测试。在我想要测试的数据访问对象中,我每次都刷新上下文,我发现很难找到一种简单合适的方法来模拟它。如有任何帮助,我们将不胜感激。 最佳答案 模拟linq-to-sql上下文确实是一项艰巨的任务。我通常通过让我的单元测试针对单独的数据库副本运行来解决这个问题,并使用特制的数据来适应单元测试。(我知道可以说它不再是单元测试,而是集成测试,但我不在乎,只要我测试了代码即可)。为了使数据

c# - 在字符串列表中查找子字符串

我有一个这样的列表,我希望能够在这个列表中搜索来自另一个字符串的子字符串。示例:Listlist=newList();stringsrch="There";list.Add("1234-Hello");list.Add("4234-There");list.Add("2342-World");我想在我的列表中搜索“There”并返回“4234-There”。我试过:varmySearch=list.FindAll(S=>s.substring(srch));foreach(vartempinmySearch){stringresult=temp;} 最佳答案

c# - 在字符串列表中查找子字符串

我有一个这样的列表,我希望能够在这个列表中搜索来自另一个字符串的子字符串。示例:Listlist=newList();stringsrch="There";list.Add("1234-Hello");list.Add("4234-There");list.Add("2342-World");我想在我的列表中搜索“There”并返回“4234-There”。我试过:varmySearch=list.FindAll(S=>s.substring(srch));foreach(vartempinmySearch){stringresult=temp;} 最佳答案

c# - 将 IQueryable linq 查询转换为 IEnumerable<T> 会取消 linq 优化的工作方式吗?

我是.NET的新手,我想知道linq是如何工作的,因为您可以一个接一个地应用许多linq查询,但在用于传输信息或转换之前,它们都不会真正执行列出等使用IQueryable有两种获取linq查询的重要方法,它直接在Sql上应用where过滤器,而IEnumerable获取所有记录,然后在内存中与它们一起使用。但是,让我们看一下这段代码://LinqdynamiclibraryIQueryablemyResult=db.Categories.Where(a=>a.Name.Contains(StringName)).OrderBy("Name").Skip(0).Take(10);if(m