我有一个带有子模型的模型。是否有一种简单的方法可以为所有空子模型创建空白子模型?现在我做了类似下面的事情,但Room也有子模型。而不是必须检查所有子模型的null,是否有一种简单的方法来获取并自动填充空白的所有子模型为空?
House house = _houseRepository.Entity.ByHouseId(houseId).First();
house = house == null ? new House { } : house;
house.Room = house.Room == null ? new Room { } : house.Room;
答案 0 :(得分:0)
解决方案1:您可以使用反射为null属性创建实例。我创建了一个方法,它将为第一级的null属性创建一个实例,如下所示。
public TModel FillNullWithBlankInstances<TModel>(TModel model) where TModel : class
{
var type = model.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var prop in properties)
{
var value = prop.GetValue(model, null);
if (value == null) // null property than create instance
{
var instance = Activator.CreateInstance( prop.PropertyType, false);
prop.SetValue(model, instance);
}
}
return model;
}
用法:
House house = _houseRepository.Entity.ByHouseId(houseId).First();
house = FillNullWithBlankInstances(house);
解决方案2:您可以使用??
这将检查null,如果为null将使用此后的内容,如下所示。您可以查看documentation以获取更多示例。
House house = _houseRepository.Entity.ByHouseId(houseId).First();
house = house ?? new House { };
house.Room = house.Room ?? new Room { };
我建议你在每次需要的时候制作一个能为你做这个的功能。
public House FillNullWithBlankInstances(House house)
{
house = house ?? new House { };
house.Room = house.Room ?? new Room { };
return house;
}
用法将是:
House house = _houseRepository.Entity.ByHouseId(houseId).First();
house = FillNullWithBlankInstances(house);