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

如何编写满足双手机号解析校验需求的try-catch语句

如何编写满足双手机号解析校验需求的try-catch语句

我完全懂你的痛点——现在要处理两个手机号的解析,既要保证至少有一个能成功解析(满足后续代码的要求),还得分别记录对应的错误日志,之前的两种写法确实都有问题:

第一种把两个解析塞在同一个try里,只要第一个失败就直接跳去catch了,哪怕第二个手机号是完全合法的,也没机会被解析,这显然不符合你的需求;第二种嵌套try-catch的逻辑又太绕,而且只有第一个手机号失败时才会尝试第二个,要是第一个成功但第二个其实需要被解析(哪怕失败),这个逻辑也覆盖不到,最后还没做“至少一个有效”的校验。

给你两个更靠谱的方案,按需选就行:

方案一:独立尝试解析,最后校验有效性

把两个手机号的解析操作完全分开,各自处理异常,最后再检查是否至少有一个有效手机号:

// 先初始化字段为null,避免未赋值问题
model.mobilePhone = null;
model.alternativePhoneNumber = null;

// 尝试解析主手机号
try
{
    model.mobilePhone = PhoneParser.Parse(m.mobile);
}
catch (Exception)
{
    _log.LogWarning("解析主手机号时出错");
}

// 不管主号成功与否,都尝试解析备用手机号
try
{
    model.alternativePhoneNumber = PhoneParser.Parse(m.alternativePhoneNumber);
}
catch (Exception)
{
    _log.LogWarning("解析备用手机号时出错");
}

// 关键步骤:确保至少有一个有效手机号,满足后续代码要求
if (model.mobilePhone == null && model.alternativePhoneNumber == null)
{
    _log.LogError("主手机号和备用手机号解析均失败");
    // 这里可以根据业务需求抛出异常,或者返回错误标记
    throw new InvalidOperationException("没有可用的有效手机号");
}

return model;

这个方案的好处是:两个解析操作完全独立,不会互相影响;错误日志能精准记录哪个手机号出了问题;最后强制校验有效性,避免后续代码拿到两个无效值。

方案二:封装辅助方法,减少重复代码

如果以后可能要扩展更多手机号的解析,建议把解析逻辑封装成一个辅助方法,代码会更简洁易维护:

// 封装的辅助方法:尝试解析手机号,失败返回null并记录对应日志
private PhoneNumber TryParsePhoneNumber(string phoneNumber, string errorLogMessage)
{
    try
    {
        return PhoneParser.Parse(phoneNumber);
    }
    catch (Exception)
    {
        _log.LogWarning(errorLogMessage);
        return null;
    }
}

// 业务逻辑里直接调用辅助方法
model.mobilePhone = TryParsePhoneNumber(m.mobile, "解析主手机号时出错");
model.alternativePhoneNumber = TryParsePhoneNumber(m.alternativePhoneNumber, "解析备用手机号时出错");

// 同样做有效性校验
if (model.mobilePhone == null && model.alternativePhoneNumber == null)
{
    _log.LogError("两个手机号解析都失败了");
    throw new InvalidOperationException("无有效手机号可用");
}

return model;

这样以后再加第三个、第四个手机号解析,直接调用辅助方法就行,不用重复写try-catch的模板代码,可读性和复用性都更强。

备注:内容来源于stack exchange,提问作者sosNiLa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:34:57