所以我知道为什么在这种情况下我会有一个空引用异常。我的问题是,在这种特定的用法下,我如何避免它。
我有一个函数解释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);
}问题是属性类可以有空值,如下所示:
{
properties: {
isToggle: false,
order: 0,
type: null,
propertyName: "Test"
},
....
}所以我明白了为什么它会抛出"properties“为空的异常,因为它有一个空值。然而,这是预期的。如何在不抛出错误的情况下检查propertyName是否为空?
编辑:我不确定null条件对这种情况有什么帮助。如果我把它放在这里
if (_assets.GetPropertyByName(data.Properties?.PropertyName) == null)它将不正确地计算为null。
发布于 2018-12-14 19:15:22
编辑:在意识到这可能更接近您的需求后更新了我的答案(?):
如果if-clause是抛出异常的地方,那么只需将其再拆分一点:
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.Properties或data.Properties.PropertyName为null,则propName为null,并且这样做时不会抛出NullReferenceException。
之后,只有当propName有一个值,并且_assets.GetPropertyByName(propName)没有返回任何东西时,它才会运行if块中的逻辑。
https://stackoverflow.com/questions/53778463
复制相似问题