我遇到一种情况,我要根据JSON文件输入实例化许多自定义对象。但是,在某些情况下,某些对象不会被实例化,因此将保留为空值。
检查null的典型方法是
if(obj == null)
{
//do stuff
}
但是如果我需要检查多个对象是否为空值,这很快就会变得混乱。
我想知道是否还有一种更简洁的方法可以将以下代码中的空检查转换为更简洁,更简洁的版本。
我正在使用C#。
列表propertyFields = new List();
PropertyField typeField = GetPropertyType(question);
PropertyField minLengthField = GetPropertyMinLength(question);
PropertyField validAnswersField = GetValidAnswers(question);
if (typeField != null)
{
propertyFields.Add(typeField);
}
if (minLengthField != null)
{
propertyFields.Add(minLengthField);
}
if (validAnswersField != null)
{
propertyFields.Add(validAnswersField);
}
答案 0 :(得分:4)
作为一种选择,您可以为propertyFields
类编写扩展方法。看起来像这样(我建议propertyFields
是List
):
public static void AddWithCheck<T>(this List<T> list, T value) where T: class
{
if (value != null)
list.Add(value);
}
答案 1 :(得分:2)
您可以在列表类型上创建扩展方法,即List
。在这种扩展方法中,如果不是null
,则可以检查null并将其添加到列表中。
public static class ListExtensions
{
public static void AddOrIgnore(this List list, object item)
{
if (item == null) return;
list.Add(item);
}
}
然后在客户代码中,您可以propertyFields.AddOrIgnore(typeField);
使用它,而无需检查typeField
是否为null
。
答案 2 :(得分:0)
要考虑的一种选择可能是利用AddRange
。
PropertyField typeField = GetPropertyType(question);
PropertyField minLengthField = GetPropertyMinLength(question);
PropertyField validAnswersField = GetValidAnswers(question);
var fieldsToAdd = new List<PropertyField>() { typeField, minLengthField, validAnswersField };
propertyFields.AddRange(fieldsToAdd.Where(z => z != null));
实际上,这将它们添加到临时列表中,然后仅在满足条件(!= null
的情况下,才有条件地将它们添加到主列表中。