鉴于以下代码和此问题中给出的建议,我决定修改这个原始方法,并询问IEnumarable中是否有任何值返回它,如果没有返回没有值的IEnumerable.
这是方法:
public IEnumerable<Friend> FindFriends()
{
//Many thanks to Rex-M for his help with this one.
//https://stackoverflow.com/users/67/rex-m
return doc.Descendants("user").Select(user => new Friend
{
ID = user.Element("id").Value,
Name = user.Element("name").Value,
URL = user.Element("url").Value,
Photo = user.Element("photo").Value
});
}
Run Code Online (Sandbox Code Playgroud)
由于一切都在return语句中,我不知道如何做到这一点.会这样的吗?
public IEnumerable<Friend> FindFriends()
{
//Many thanks to Rex-M for his help with this one.
//https://stackoverflow.com/users/67/rex-m
if (userExists)
{
return doc.Descendants("user").Select(user => new Friend
{
ID = user.Element("id").Value,
Name = user.Element("name").Value,
URL = user.Element("url").Value,
Photo = user.Element("photo").Value
});
}
else
{ …Run Code Online (Sandbox Code Playgroud) 这两种方法似乎对我来说都是一样的
public IEnumerable<string> GetNothing()
{
return Enumerable.Empty<string>();
}
public IEnumerable<string> GetLessThanNothing()
{
yield break;
}
Run Code Online (Sandbox Code Playgroud)
我在测试场景中分析了每一个,我没有看到速度上有意义的差异,但yield break版本稍微快一些.
是否有任何理由使用一个而不是另一个?一个比另一个更容易阅读吗?是否存在对呼叫者有影响的行为差异?
可能重复:
C#中的"yield break;"是什么?
任何人都可以看到使用"break"或"return"无法实现的"yield break"语句.
这句话似乎完全没用.更重要的是,如果没有这个陈述,"收益率返回X"语句可以简化为"收益率X",这更具可读性.
我错过了什么?
我希望以一种易于理解的形式了解该声明的所有内容yield.
我已经阅读了关于yield实现迭代器模式时的语句及其简易性.但是,大部分都非常干燥.我想深入研究微软如何处理收益率.
另外,你什么时候使用收益率突破?