繁体   English   中英

如何在 IEnumerable 中验证收益返回默认值?

[英]How to validate yield return default in IEnumerable?

我正在尝试检查IEnumerable<>是 null 还是空的,但不知何故,只要它为空,我的 if 检查总是失败。

    private bool Update()
    {
        IEnumerable<RecordHolder> recordHolders = GetData();
        // below  check doesn't work
        if (recordHolders == null || !recordHolders.Any())
            return false;

        // .. some other code
    }

    public IEnumerable<RecordHolder> GetData()
    {
        var isSuccess = PullRemote(url);
        if (!isSuccess.Result) { yield return default; }

        // .. some other code
    }

每当我的GetData()方法返回yield return default时,随后的if签入Update方法就不起作用。 我做错了什么吗?

我认为我的 if check in Update方法将能够捕获yield return default ,但我错了。

我认为您正在寻找yield break而不是yield return default 或者,您可以在常规方法(不是迭代器块)中执行操作的第一部分,并在特殊情况下返回失败情况( Array.Empty<T>()是一种常见的选择),推迟到迭代器块(或Select投影)用于成功案例。

当您执行 yield return default 时,您将返回 RecordHolder 的默认值,即 null。

因此,您的 IEnumerable 将包含 1 个项目,即 null。

尝试返回 Enumerable.Empty() 或 Array.Empty(); 而不是你的收益回报默认值。

例子

using System;
using System.Collections.Generic;
using System.Linq;
                
public class Program
{
    public static void Main()
{
    var result = GetData();
    Console.WriteLine(result.Count()); // Prints 1
}

public static IEnumerable<MyClass> GetData()
{
    yield return default;
}

public class MyClass
{
        public string MyProperty {get;set;}
    }
}

此处示例: https://dotnetfiddle.net/vVefPx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM