You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何判断结构体不为null?无需转为类

结构体List查找结果的非空判断方案

你遇到的错误本质是:结构体是值类型,永远不可能为null。List<T>.Find方法在找不到匹配项时,会返回该结构体的默认值(即default(MyMap)),而非null,所以直接用!= null会触发编译错误。

下面是几种无需将结构体转为类的解决方法:

方法1:先检查存在性再获取(适合小List)

先用Exists方法确认是否有匹配项,再调用Find获取对象:

if (myMaps.Exists(o => o.idx.ToString() == "1"))
{
    MyMap e_res_i = myMaps.Find(o => o.idx.ToString() == "1");
    // 执行你的业务逻辑
}

缺点是会遍历List两次,数据量大时效率较低。

方法2:用可空值类型包裹(推荐)

将结构体转为可空值类型(MyMap?,C# 8.0+支持),结合FirstOrDefault方法获取结果,再通过HasValue判断是否找到有效对象:

MyMap? e_res_i = myMaps.FirstOrDefault(o => o.idx.ToString() == "1");
if (e_res_i.HasValue)
{
    MyMap actualMap = e_res_i.Value;
    // 执行你的业务逻辑
}

这种方法只遍历一次List,且能准确判断是否找到匹配项,是最优方案。

方法3:比较默认值(需谨慎使用)

如果你的结构体默认值(比如idx为0、空字符串等)不会出现在实际业务数据中,可以直接比较返回值是否等于默认值:

MyMap e_res_i = myMaps.Find(o => o.idx.ToString() == "1");
if (!e_res_i.Equals(default(MyMap)))
{
    // 执行你的业务逻辑
}

注意:如果业务中存在与默认值完全一致的结构体对象,会导致误判,所以仅在能确保默认值无业务意义时使用。

内容的提问来源于stack exchange,提问作者Mich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:55:12