首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绕过NullReferenceException

绕过NullReferenceException
EN

Stack Overflow用户
提问于 2018-12-14 19:01:32
回答 1查看 62关注 0票数 1

所以我知道为什么在这种情况下我会有一个空引用异常。我的问题是,在这种特定的用法下,我如何避免它。

我有一个函数解释JSON数据,如下所示:

代码语言:javascript
复制
public IActionResult SendLine([FromBody] User data) {
    if (_assets.GetPropertyByName(data.Properties.PropertyName) == null) {
        _assets.AddProperty(new Property {
            IsToggle = data.Properties.IsToggle,
            Order = data.Propertis.Order,
            Type = data.Properties.Type,
            PropertyName = data.Properties.PropertyName
        });
    }
    _assets.AddRow(data);
    return Json(data);
}

问题是属性类可以有空值,如下所示:

代码语言:javascript
复制
{
  properties: {
    isToggle: false,
    order: 0,
    type: null,
    propertyName: "Test"
  },
  ....
}

所以我明白了为什么它会抛出"properties“为空的异常,因为它有一个空值。然而,这是预期的。如何在不抛出错误的情况下检查propertyName是否为空?

编辑:我不确定null条件对这种情况有什么帮助。如果我把它放在这里

代码语言:javascript
复制
if (_assets.GetPropertyByName(data.Properties?.PropertyName) == null)

它将不正确地计算为null。

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 19:15:22

编辑:在意识到这可能更接近您的需求后更新了我的答案(?):

如果if-clause是抛出异常的地方,那么只需将其再拆分一点:

代码语言:javascript
复制
var propName = data?.Properties?.PropertyName;
var isPropNameFound = !string.IsNullOrEmpty(propName);
var prop = isPropNameFound ? _assets.GetPropertyByName(propName) : null;

if (isPropNameFound && (prop == null))
{
    // Add new property if name was given, and it 
    // was not found to already have been added?
}

这将确保如果data.Propertiesdata.Properties.PropertyName为null,则propName为null,并且这样做时不会抛出NullReferenceException。

之后,只有当propName有一个值,并且_assets.GetPropertyByName(propName)没有返回任何东西时,它才会运行if块中的逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53778463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档