jjzjj

c# - C# 中延迟执行和懒惰求值的区别

能否请您告诉我C#中延迟执行和惰性求值之间的确切差异是什么?这两个是同义词。有人可以举例说明区别吗? 最佳答案 实际上,它们的意思本质上是一样的。但是,最好使用术语延迟。懒惰是指“除非万不得已才去做。”延迟意味着“在调用者实际使用它之前不计算结果。”在实践中,当调用者决定使用评估结果时(即开始遍历IEnumerable),这正是需要完成“工作”的时间点(例如向数据库)。术语延迟更具体/描述了实际发生的事情。当我说我懒惰时,意思是我避免做不必要的工作;真正的含义是模棱两可的。然而,当我说执行/评估是延迟时,这实质上意味着我根本没有给你

c# - 如果不支持包含,如何在 LINQ to Entities( Entity Framework )中执行 SQL 样式 'IN' 语句?

我正在使用LINQtoEntities(不是LINQtoSQL),但在创建“IN”样式查询时遇到了问题。这是我目前的查询:varitems=db.InventoryItem.Include("Kind").Include("PropertyValues").Include("PropertyValues.KindProperty").Where(itm=>valueIds.Contains(itm.ID)).ToList();然而,当我这样做时,会抛出以下异常:LINQtoEntitiesdoesnotrecognizethemethod'BooleanContains(Int64)'

c# - 什么是 C# 6.0 #pragma disable 警告功能?

列表C#6.0finalfeatures包含一个名为#pragma的功能,列为“已添加”,示例是禁用警告。然而这个功能didexistinC#6.0之前。6.0到底增加了什么? 最佳答案 以前,您必须指定警告编号。所以要禁用CS0501,您可以使用#pragmawarningdisable0501现在,你可以使用#pragmawarningdisableCS0501...当您让Roslyn代码分析器使用不同的标识符发出警告时,这一点非常重要。它基本上将警告的命名空间从“数字”更改为“字母数字字符串”。我不知道新语法的细节-我还没有看

c# - Visual Studio 中的 "Add existing item": is it possible to make "Add as link" default?

正如this中指出的那样因此,VisualStudio中的Add>Existingitem对话框默认显示Add按钮(意味着所选项目将被物理复制到新位置),而理想的操作通常(总是?)添加为链接。是否可以配置VisualStudio,以便在打开添加>现有项目对话框时默认选择添加为链接?我已经彻底搜索了VisualStudio中的Options对话框并检查了MSDN文档以找到对此的答案,但到目前为止无济于事。ProjectLinker当两个新项目要共享同一代码库时,自动链接是一个不错的选择。但是,当将大量文件从现有项目链接到新项目时,似乎仅限于Add>Existingitem方法,而且这项工

c# - 何时何地使用表达式树

我正在阅读有关表达式树功能以及如何使用lambda表达式创建委托(delegate)的内容。我仍然不知道它在什么情况下有用,以及我应该在什么真实世界的例子中使用它。 最佳答案 表达式树的主要用途是用于进程外的LINQ提供程序,例如LINQtoSQL。当你这样写的时候:varquery=people.Where(x=>x.Age>18).Select(x=>x.Name);这些lambda表达式可以或者转换为委托(delegate),然后可以执行委托(delegate)(就像它们在LINQtoObject中一样)或者它们可以转换为表达

c# - 为什么值类型存储在堆栈上?

为什么C#(.Net)更喜欢堆栈而不是存储值类型?这种设计背后的主要原因是什么?是因为对堆栈的读/写操作更好地利用了机器处理器吗?此外,也许您可​​以证明为什么其他人不行? 最佳答案 EricLippert对此进行了讨论here;首先,“值类型存储在堆栈中”是不正确的。他们有时是,但不是:类中的字段捕获的变量迭代器block中的变量当它们可以存储在堆栈中时,这是一种对它们的生命周期进行建模的便捷方式,但不需要将它们存储在堆栈中。例如,您可以编写一个没有堆栈的编译器+CLI。 关于c#-为

c# - 有什么正确的方法可以通过路径获取文件吗?

我在KnownFolders.VideosLibrary中有两个同名文件,在这种情况下,我无法通过其名称访问文件,因此它将仅返回第一个文件。因此,除了解析文件夹中的所有文件之外,还有其他方法可以获取文件吗?//thisreturntwofilesvarfiles=(awaitKnownFolders.VideosLibrary.GetFilesAsync()).Where(x=>x.Name=="test.txt").ToArray();//withthisIcangetonlyonefileStorageFilefile=awaitKnownFolders.VideosLibrary

c# - Visual Studio : debug multiple projects at the same time?

是否可以在VisualStudio中同时调试多个项目?我知道您可以从解决方案属性中选择多个启动项目,但如何处理断点?如果两个项目使用同一个类(它的两个不同实例),并且我在其中的一个断点处停止,它只会阻止一个程序还是两个程序?我怎么知道哪个可执行文件正在断点?我有点困惑。 最佳答案 是的,这是可能的。您可以在解决方案中设置多个启动项目(右键单击解决方案,转到设置启动项目,选择多个启动项目),并为包含在解决方案(无、开始、不调试就开始)。如果您将多个项目设置为开始,则调试器将在启动时附加到每个项目。当您遇到断点时,您可以使用调试位置工具

c# - String.IsNullOrEmpty 或 string.IsNullOrEmpty

这个问题在这里已经有了答案:WhatisthedifferencebetweenStringandstringinC#?(65个答案)关闭1年前。过去3天我一直在查看代码,原来的开发人员使用String类而不是string类来定义字符串。因此,当他们使用IsNullOrEmpty方法时,它被定义为String.IsNullOrEmpty。我想知道的是,与string.IsNullOrEmpty相比,编译器如何处理String.IsNullOrEmpty?与string.IsNullOrEmpty相比,使用String.IsNullOrEmpty有什么优势吗?

c# - 什么时候应该使用 ThrowHelper 方法而不是直接抛出?

什么时候使用ThrowHelper方法而不是直接抛出是合适的?voidMyMethod(){...//thrownewArgumentNullException("paramName");ThrowArgumentNullException("paramName");...}voidThrowArgumentNullException(stringparamName){thrownewArgumentNullException(paramName);}我读到调用ThrowHelper方法(唯一目的是抛出异常的方法)而不是直接抛出应该产生更小的字节码。这和明显的封装(另一层间接)可能是不