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