gpt4 book ai didi

c# - 找不到数据时是否返回一个空的通用列表?

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:19 26 4
gpt4 key购买 nike

我的客户端代码在四种不同的方法中实际上是相同的(不同之处在于被调用的特定 Web API RESTful 方法和相应的操纵通用列表)。

在四种情况中的三种情况下,我可以像这样跳出 while 循环(参见 How can I safely loop until there is nothing more to do without using a "placeholder" while conditon?):

if (arr.Count <= 0) break;

...但在一种情况下,一旦 RESTful 方法不再返回数据,就会导致 NRE。在那种方法中,我必须使用:

if (null == arr) break;

我现在知道为什么了,因此:

更新

不同行为的原因是因为存储库代码不同。因此,我将问题从“为什么在大多数情况下检查 JArray.Count 有效,但在特定情况下导致 NRE?

以下是检查数组计数的三种方法的完成方式:

public IEnumerable<Subdepartment> Get(int ID, int CountToFetch)
{
return subdepartments.Where(i => i.Id > ID).Take(CountToFetch);
}

...这是 RedemptionRepository 中包含的“替代版本”:

public IEnumerable<Redemption> Get(int ID, int CountToFetch)
{
IEnumerable<Redemption> redempts = null;
if (redemptions.Where(i => i.Id > ID).Take(CountToFetch).Count() > 0)
{
redempts = redemptions.Where(i => i.Id > ID).Take(CountToFetch);
}
return redempts;
}

因此,为了与所有四种方法保持一致,我可以像上面那样制作所有其他 Repository 方法(没有找到数据时返回 null),并将客户端中的测试条件更改为无效,或者我可以恢复赎回存储库代码与以前/其他存储库代码一样。

所以问题是:哪种方法是首选(没有双关语意)?

最佳答案

您绝对应该更改最后一个方法以匹配之前的方法:

public IEnumerable<Redemption> Get(int ID, int CountToFetch)
{
return redemptions.Where(i => i.Id > ID).Take(CountToFetch);
}

NullReferenceException 并不是唯一的原因。因为 LINQ 是惰性的并且延迟执行其他方法执行查询两次!一次获取 Count(),第二个获取实际的结果集合。如果你真的想返回 null 而不是空集合使用应该得到以下:

public IEnumerable<Redemption> Get(int ID, int CountToFetch)
{
var redempts = redemptions.Where(i => i.Id > ID).Take(CountToFetch).ToList();
if (redemptions.Any())
{
return redempts;
}
return null;
}

关于c# - 找不到数据时是否返回一个空的通用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com