c# - 为什么在 byte[] 元素上使用 any() 时会出现 NullException
问题描述
我想测试我的 byte[] 元素 ImageData 是否包含任何数据。如果没有数据,我的数据库将其显示为 NULL。我尝试使用 .Any() 方法,但由于某种原因这不起作用。为什么?
我已经用下面的代码试过了
public FileStreamResult ViewImage(int id)
{
Candidate candidate = _context.Candidate.FirstOrDefault(m => m.Id == id);
bool hasImage = candidate.ImageData.Any(); // I get the NullException here
if (hasImage)
{
MemoryStream ms = new MemoryStream(candidate.ImageData);
return new FileStreamResult(ms, candidate.ImageType);
}
return null;
}
如果我使用逻辑 if(candidate.ImageData == null)
,我会得到一个true
or false
。我考虑过使用 Any() 更优雅。有什么建议么?
解决方案
它不起作用,因为您在空引用上调用方法...在这种情况下,它是一个扩展方法,因此您将获得 aArgumentNullException
而不是 a NullReferenceException
,但它的行为与记录的完全一样。
如果需要,您可以为此编写自己的扩展方法:
public class NullSafeEnumerable
{
public static bool NonNullAny<T>(this IEnumerable<T> source) =>
source is object && source.Any();
}
(这不是一个好名字,但你可以想出你自己的名字。)
或者您可以使用空条件运算符:
bool hasImage = candidate.ImageData?.Any() ?? false;
或(等效地):
bool hasImage = candidate.ImageData?.Any() == true;
推荐阅读
- postgresql - 如何用postgres中另一个表中的行完成表中缺失的行?
- python - 如何立即生成我的迷宫,所以我不必观看它生成?
- google-play-console - 为什么付款后没有创建我的 Google Play 控制台帐户?. 我找不到来自 Google Play 管理中心的任何回复
- java - 如何解决此问题:LoginController 中构造函数的参数 0 需要找不到类型为“OktaOAuth2Properties”的 bean
- openstreetmap - 使用 osmosis 快照模式创建 osm-pbf 的 Postgres 数据失败
- magento-1.9 - 如何使用自定义扩展 magento 1.9 在产品页面的描述选项卡下添加自定义数据?
- python - 匹配自定义数据集的 PyTorch 张量维度
- node.js - 无法写入文件和读取 NodeJS/NestJS 微服务应用程序基本文件夹中的文件
- python - 将分层 CSV 数据转换为 JSON
- c# - 正确设置 .NET 库项目,这样我就不需要将 DLL 和其他文件复制到调用程序中