规避NullReferenceException

时间:2018-12-14 11:01:32

标签: c# json

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

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

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);
}

问题在于Property类可以具有空值,如下所示:

{
  properties: {
    isToggle: false,
    order: 0,
    type: null,
    propertyName: "Test"
  },
  ....
}

所以我明白了为什么它会抛出“属性”为null的异常,因为它具有null值。但是,这是预期的。如何检查propertyName是否为null而不抛出该错误?

编辑: 我不确定空条件将如何帮助这种情况。如果我把它放在这里

if (_assets.GetPropertyByName(data.Properties?.PropertyName) == null)

它将不正确地评估为null。

1 个答案:

答案 0 :(得分:0)

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


如果引发您的异常的地方是headers子句,则将其拆分成更多一点:

if

如果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? } propName为null,则应确保data.Properties为null,并且不要抛出NullReferenceException。

此后,仅当data.Properties.PropertyName有值并且if不返回任何值时,它才会在propName块中运行逻辑。