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

.NET7中如何将对象值存入字符串变量并避免空引用异常

问题描述

在.NET7环境中,尝试将SupPhone对象的PhoneNumber值存入字符串变量时,若SupPhone对象为null会触发**“对象引用未设置为对象实例”**异常;仅当SupPhone.PhoneNumber有值时能正常存储。尝试用suphone.ToString() == null判断无效,且无法使用三元运算符,寻求解决办法。

修正语法错误后的相关代码:

[XmlType("CustRec"), XmlRoot, Serializable]
public class SupPhone
{
    private string _phone;

    public SupPhone()
    {
        _phone = string.Empty;
    }

    [XmlElement(ElementName = "PHONE_NUMBER")]
    public string PhoneNumber
    {
        get { return _phone; }
        set { _phone = value; }
    }
}

// program.cs
SupPhone suphone = phonecollection.GetMainPhone();
// 此处需处理suphone为null的情况,设置空字符串,尝试suphone.ToString()==null无效
// 注:用户称无法使用三元运算符

string phonenbr = suphone.PhoneNumber; // 此处suphone为null会报错
IsValidPhone(phonenbr);

public SupPhone GetMainPhone()
{
    SupPhone mainphone = null;
    for (int a = 0; a < base.Count; a++)
    {
        mainphone = base[a]; // 修正原代码的x为循环变量a
    }
    return mainphone;
}

bool IsValidPhone(string phone)
{
    // 手机号验证逻辑
}
解决方案
  • 空条件+空合并运算符组合(推荐)
    这是.NET中处理空引用最简洁的方式,无需三元运算符:

    string phonenbr = suphone?.PhoneNumber ?? string.Empty;
    

    逻辑:若suphone不为null则取其PhoneNumber,否则返回null;再通过??将null替换为空字符串。

  • 传统if分支判断
    直接通过分支处理null情况,避免空引用:

    string phonenbr;
    if (suphone == null)
    {
        phonenbr = string.Empty;
    }
    else
    {
        phonenbr = suphone.PhoneNumber;
    }
    

    注意:你之前用suphone.ToString() == null无效的核心原因是:当suphone为null时,调用ToString()会直接触发空引用异常,根本无法执行判断逻辑。必须先判断对象本身是否为null,再访问其成员。

  • 从根源避免null:优化GetMainPhone方法
    如果业务允许,修改GetMainPhone方法,确保返回永远非null的SupPhone实例:

    public SupPhone GetMainPhone()
    {
        SupPhone mainphone = null;
        for (int a = 0; a < base.Count; a++)
        {
            mainphone = base[a];
        }
        // 若循环后无结果,返回默认初始化的SupPhone(构造函数已将_phone设为空字符串)
        return mainphone ?? new SupPhone();
    }
    

    优化后,后续代码可直接安全取值:

    string phonenbr = suphone.PhoneNumber; // 无需再处理null
    

补充:关于“无法使用三元运算符”的说明

.NET7完全支持三元运算符,若之前尝试报错大概率是语法错误。正确写法如下:

string phonenbr = suphone != null ? suphone.PhoneNumber : string.Empty;

如果确实受限不能使用,前面的方案已足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:53:09