Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 收益率行为_C#_Ienumerable_Yield_Yield Return - Fatal编程技术网

C# 收益率行为

C# 收益率行为,c#,ienumerable,yield,yield-return,C#,Ienumerable,Yield,Yield Return,我有以下代码: virtual public IEnumerable<string> GetSelectedIds(){ if (_kids == null) yield return null; foreach (var current in _kids.Nodes) yield return current; } virtualpublic IEnumerable getSelectedId(){ 如果(_=null) 收益返回空;

我有以下代码:

virtual public IEnumerable<string> GetSelectedIds(){
   if (_kids == null)
        yield return null;
   foreach (var current in _kids.Nodes)
        yield return current;
}
virtualpublic IEnumerable getSelectedId(){
如果(_=null)
收益返回空;
foreach(节点中的var电流)
产生回流电流;
}
如果
\u kids==null

如果
\u kids==null
,我希望这个方法在前提条件级别返回,但是它没有

问题

为什么方法开头的前提条件没有效果?

试试这个:

virtual public IEnumerable<string> GetSelectedIds(){
   if (_kids == null){
      yield return null;
      yield break;
   }
   foreach (var current in _kids.Nodes)
      yield return current;
}
virtualpublic IEnumerable getSelectedId(){
如果(_=null){
收益返回空;
屈服断裂;
}
foreach(节点中的var电流)
产生回流电流;
}
试试这个:

virtual public IEnumerable<string> GetSelectedIds(){
   if (_kids == null){
      yield return null;
      yield break;
   }
   foreach (var current in _kids.Nodes)
      yield return current;
}
virtualpublic IEnumerable getSelectedId(){
如果(_=null){
收益返回空;
屈服断裂;
}
foreach(节点中的var电流)
产生回流电流;
}
更改

if (_kids == null)
        yield return null;

这将返回一个空序列,用户不必检查返回值

或者你可以重写如下

public IEnumerable<string> GetSelectedIds(){
   if (_kids == null)
        return null;

   return GetSelectedIds2();
}

private IEnumerable<string> GetSelectedIds2()
{
    foreach (var current in _kids.Nodes)
        yield return current;
}
public IEnumerable getSelectedId(){
如果(_=null)
返回null;
返回getselecteds2();
}
私有IEnumerable GetSelecteds2()
{
foreach(节点中的var电流)
产生回流电流;
}
更改

if (_kids == null)
        yield return null;

这将返回一个空序列,用户不必检查返回值

或者你可以重写如下

public IEnumerable<string> GetSelectedIds(){
   if (_kids == null)
        return null;

   return GetSelectedIds2();
}

private IEnumerable<string> GetSelectedIds2()
{
    foreach (var current in _kids.Nodes)
        yield return current;
}
public IEnumerable getSelectedId(){
如果(_=null)
返回null;
返回getselecteds2();
}
私有IEnumerable GetSelecteds2()
{
foreach(节点中的var电流)
产生回流电流;
}

您的
yield return null
几乎肯定不是您想要的-它不会停止迭代运行(正如您所发现的),而且您可能根本不想将null字符串返回到集合中

用屈服断裂代替它。这样你会得到一个空的集合

如果(_kids!=null),则将
foreach
包装在
中,这可能更清楚

至于为什么先决条件不停止执行-这就是
产生返回的方式
的工作原理-想象这样一种方法:

IEnumerable<String> GetStrings()
{
   yield return "MyFirstString";
   yield return "MySecondString";
   yield return "MyThirdString";
}
IEnumerable GetStrings()
{
收益返回“MyFirstString”;
收益返回“MySecondString”;
收益率返回“MyThirdString”;
}

这将返回三个字符串的集合-即,在第一次
产生返回后,它不会停止

您的
yield return null
几乎肯定不是您想要的-它不会停止迭代的运行(正如您所发现的),而且您可能无论如何都不想将null字符串返回到集合中

用屈服断裂代替它。这样你会得到一个空的集合

如果(_kids!=null)
,则将
foreach
包装在
中,这可能更清楚

至于为什么先决条件不停止执行-这就是
产生返回的方式
的工作原理-想象这样一种方法:

IEnumerable<String> GetStrings()
{
   yield return "MyFirstString";
   yield return "MySecondString";
   yield return "MyThirdString";
}
IEnumerable GetStrings()
{
收益返回“MyFirstString”;
收益返回“MySecondString”;
收益率返回“MyThirdString”;
}


这将返回三个字符串的集合-即,在第一次
产生返回后,它不会停止

<代码>收益返回< /代码>不停止枚举-您应该使用<代码> YILDD中断<代码>作为金刚协议,如果代码< >孩子= = null >,您会考虑返回空序列吗?这应该是好的。<代码>收益返回< /代码>不会停止枚举-您应该使用<代码> YILDD Bug <代码>作为金刚协议,如果代码< >孩子= = null < /代码>,您会考虑返回一个空序列吗?这应该很好。不,如果
\u kids
null
@lazyberezovsky OP没有这样说,那么OP希望从枚举器返回
null
,我认为最好返回一个空序列。+1!谢谢你的快速回答,这可能是最好的回答,因为我需要返回一个空的枚举:)@lazyberezovsky我打赌他不会。而且他不应该想要,即使他认为他想要…@Willden同意,我倾向于不从方法返回空值。但我不明白OP为什么会这样做(他可以使用简单的
if..else
而不产生任何结果)不-OP希望从枚举器返回
null
,如果
\u kids
null
@lazyberezovsky OP没有这样说,我认为最好返回一个空序列。+1!谢谢你的快速回答,这可能是最好的回答,因为我需要返回一个空的枚举:)@lazyberezovsky我打赌他不会。而且他不应该想要,即使他认为他想要…@Willden同意,我倾向于不从方法返回空值。但是我不明白为什么OP会这样做(他可以使用简单的
if..else
而不产生任何结果)或者更简单,只需在
foreach
之前插入
else
。如果你使用
yield break
,你的
if(\u kids!=null)
也将是多余的。这一点就是我所评论的(在你扩展你的答案之前)。或者更简单,在
foreach
之前插入
else
。如果你使用
yield break
,你的
If(_kids!=null)
也将是多余的。这一点是我的全部评论(在你扩展你的答案之前)。+1!谢谢你的快速回答。然而,我觉得
收益返回null
是redandent。@GETah是的,这取决于OP。我认为让它
收益中断更好。确实如此。顺便说一下,我是OP:D@GETah啊,我甚至没有注意到:),是的,如果这样,你可以删除它,如果你喜欢。+1!谢谢你的快速回答。然而,我觉得
收益返回null
是redandent。@GETah是的,这取决于OP。我认为让它
收益中断