- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在完成教程(专业 ASP.NET MVC - Nerd 晚餐)时,我遇到了这段代码:
public IEnumerable<RuleViolation> GetRuleViolations() {
if (String.IsNullOrEmpty(Title))
yield return new RuleViolation("Title required", "Title");
if (String.IsNullOrEmpty(Description))
yield return new RuleViolation("Description required","Description");
if (String.IsNullOrEmpty(HostedBy))
yield return new RuleViolation("HostedBy required", "HostedBy");
if (String.IsNullOrEmpty(Address))
yield return new RuleViolation("Address required", "Address");
if (String.IsNullOrEmpty(Country))
yield return new RuleViolation("Country required", "Country");
if (String.IsNullOrEmpty(ContactPhone))
yield return new RuleViolation("Phone# required", "ContactPhone");
if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
yield return new RuleViolation("Phone# does not match country", "ContactPhone");
yield break;
}
我已经阅读了 yield
,但我想我的理解还是有点模糊。它似乎要做的是创建一个对象,该对象允许循环遍历集合中的项目而不实际执行循环,除非绝对必要。
不过,这个例子对我来说有点奇怪。我认为它正在做的是延迟创建任何 RuleViolation
实例,直到程序员使用 for each
实际请求集合中的特定项目或 LINQ 扩展方法,如 .ElementAt(2)
.
除此之外,我还有一些问题:
何时执行 if
的条件部分语句得到评估?当GetRuleViolations()
被调用或可枚举实际迭代时?换句话说,如果 Title
的值从 null
更改至 Really Geeky Dinner
在我调用 GetRuleViolations()
的时间之间当我尝试实际迭代它时,将 RuleViolation("Title required", "Title")
创建还是不创建?
为什么是yield break;
必要的?它到底在这里做什么?
假设 Title
为 null 或空。如果我调用 GetRuleViolations()
然后连续两次迭代结果枚举,new RuleViolation("Title required", "Title")
将迭代多少次被称为?
最佳答案
包含 yield
命令的函数与普通函数的处理方式不同。当调用该函数时,幕后发生的事情是匿名类型由函数的特定 IEnumerable
类型构造,该函数创建该类型的对象并返回它。匿名类包含执行函数主体的逻辑,直到每次调用 IEnumerable.MoveNext
时执行下一个 yield
命令。这有点误导,函数体不像普通函数那样分批执行,而是分块执行,每 block 在枚举器向前移动一步时执行。
关于您的问题:
if
都会被执行。yield break
在上面的例子中确实不是必需的。它的作用是终止枚举。关于c# - Nerd Dinner 教程中 C# yield 关键字的有趣用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971053/
在 MacVim 上使用 NERD Tree 时,我可以在 NERD Tree 窗口中使用“t”(或“T”在后台打开文件)在新选项卡中打开文件,但是当我切换到该选项卡时, NERD 树窗口不再可见,因
我正在使用 NERD Commenter .我想给它添加一个新的文件类型。在最新版本中,文件类型定义从第 69 行开始。我想为 .pde(Arduino)添加分隔符。由于 .pde 文件遵循与 C++
试图获得一个不错的 vim 设置。我想让 Nerd 树最好地工作,但是当我使用它时,它在每个部分前面都有这些字符: ?~V? 看起来像这样: ?~V? project/$ ?~V? tools/$
Nerdtree突然开始表现出一些奇怪。如您在屏幕快照中所见,目录都以?〜V?为前缀。随后,我也无法再打开目录,只能打开文件。 任何人都不知道从哪里开始。这是shell本身的vim问题,还是更低的问题
我一直在查看 Nerd Dinner代码和他们在模型中做的一件事是创建 DataContext 的实例,如下所示: public class DinnerRepository { privat
对于我(或者其他人)来说,拥有一个我需要遍历的对象列表然后与属性列表交互的情况并不少见。我使用嵌套循环,如下所示: IList listOfObjects; IList listOfPropertie
我切换到 dvorak 布局,我在 vim 中重新映射键,但是 Nerd 树插件中的某些键仍然可以像 qwerty 布局一样工作。我该如何解决? 最佳答案 NERDTree 插件有很好的文档记录。快速
以下对我来说很好用,它会注释掉当前行: cc 但根据文档( https://github.com/scrooloose/nerdcommenter#usage ),如果我想切换评论,我会这样做: c
在 Vim NERDTree 中是否有一种简单的方法可以删除光标下的文件? 切换帮助 ? 不显示任何要删除的映射。 最佳答案 使用 m 打开菜单,然后使用 d(或向下滚动删除并按 Enter)。如果您
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 8年前关闭
YouTube的“ Nerd 统计”提供了有关正在播放的视频的信息。在编解码器部分中,它显示了mimetype和括号中的数字。这个数字是什么意思。 以及如何获取最新的Itag表以供引用。 最佳答案 经
当使用带有 NERDTree 插件的 vim 编辑器浏览项目树时,是否有一种简单的方法可以在当前突出显示的目录下创建新的源代码文件? 目前,我进入 shell,添加文件,然后刷新树。一定有更好的方法。
我正在使用Janus用于 Vim 自定义。 令我困扰的一件事是它打开 NERD Tree启动时在单独的缓冲区中。我不想完全禁用 NERD Tree。只是不想在启动时打开它。 有没有一种方法无需调整 J
在 Nerd Dinner 的 Entity Framework 存储库中,查询的返回类型对应于模型而不是 EF 概念实体。 public IQueryable FindAllDinners() {
这里有点像在黑暗中拍摄。也许有人会知道我在说什么,但我陷入了一个问题,我已经尝试了一切都无济于事:( 这是 Big Nerd Ranch Android 书第二版第二版最后的第 9 章。当我在模拟器上
为什么当我关注 Big Nerd Ranch 第 4 版时,我总是需要导入 #import 对于任何包含 UIView, UIViewController, CG 的类东西,但解决方案中的代码在没有它
我是 Swift 的新手,正在尝试解决 Swift 编程中的一个挑战:The Big Nerd Ranch Guide(第一版)。第 6 章中的问题是关于使用嵌套循环: 使用循环从 0 到 100 以
这是我的 quizactivity.java,我的 xml 没有任何错误,所以除非您需要,否则我不会上传这些错误,如果您需要,请告诉我。它还说 public void onStart Stop Des
我在 Mac OSX 10.6.8 上通过 Pathogen 安装了 NERDTree。 当我 vim 目录时,我无法使用 Enter 键进入子目录。此外,目录如下所示: ?~V? doc/ 发生什么
在完成教程(专业 ASP.NET MVC - Nerd 晚餐)时,我遇到了这段代码: public IEnumerable GetRuleViolations() { if (String.I
我是一名优秀的程序员,十分优秀!