如何在空子模型为空时创建空白子模型

时间:2015-04-03 15:56:57

标签: c# entity models

我有一个带有子模型的模型。是否有一种简单的方法可以为所有空子模型创建空白子模型?现在我做了类似下面的事情,但Room也有子模型。而不是必须检查所有子模型的null,是否有一种简单的方法来获取并自动填充空白的所有子模型为空?

House house = _houseRepository.Entity.ByHouseId(houseId).First();

house = house == null ? new House { } : house;

house.Room = house.Room == null ? new Room { } : house.Room;

1 个答案:

答案 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);