所以我知道为什么在这种情况下我有一个空引用异常。我的问题是,鉴于这种特定用途,我该如何避免使用它。
我有一个解释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。
答案 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
块中运行逻辑。