如何在C#动态集合中将null替换为默认值
本文关键字:null 替换 默认值 集合 动态 | 更新日期: 2023-09-27 18:29:51
我有一个模型MobileList的ObservableCollection。
在集合中,大多数值都为null。
在这里,我想将null转换为相应的DataType。
对于Exmaple:
String obj = string.Empty;
int obj = new int();
DateTime obj = new DateTime();
注意:Collection是动态的,我无法检查null是否为属于Int、float、bool或任何东西。请在上提出建议通用转换函数,可在所有地方使用。请考虑相应的模型属性DataType,基于我们必须将null更改为相应的DataType
public class Mobile
{
private ObservableCollection<MobileModel> _mobileList;
public ObservableCollection<MobileModel> MobileList
{
get { return _mobileList; }
set { _mobileList = value;}
}
public Mobile()
{
ObservableCollection<MobileModel> mList = new ObservableCollection<MobileModel>();
ObservableCollection<MobileModelInfo> modList = new ObservableCollection<MobileModelInfo>();
MobileModel mob = new MobileModel();
modList.Clear();
mob.Brand = "Apple";
modList.Add(new MobileModelInfo { Name = "iPhone 4", Catagory = "Smart Phone", Year = Convert.ToDateTime("12/18/2011"), Version = null });
modList.Add(new MobileModelInfo { Name = "iPhone 5", Catagory = null, Year = Convert.ToDateTime("07/11/2013"), Version = 1.0 });
modList.Add(new MobileModelInfo { Name = "iPhone 6", Catagory = "Premium Smart Phone", Year = null, Version = 1.0 });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "IOS";
mList.Add(mob);
mob = new MobileModel();
modList.Clear();
mob.Brand = "Samsung";
modList.Add(new MobileModelInfo { Name = "S4", Catagory = "Smart Phone", Year = Convert.ToDateTime("04/05/2011"), Version = 1.0 });
modList.Add(new MobileModelInfo { Name = "S5", Catagory = "Smart Phone", Year = null, Version = 1.0 });
modList.Add(new MobileModelInfo { Name = "S6", Catagory = "null", Year = Convert.ToDateTime("01/05/2011"), Version = null });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "Android";
mList.Add(mob);
mob = new MobileModel();
modList.Clear();
mob.Brand = "MicroSoft";
modList.Add(new MobileModelInfo { Name = "Lumina 9900", Catagory = "Phone", Year = null, Version = null });
modList.Add(new MobileModelInfo { Name = "Opera X220", Catagory = "Smart Phone", Year = Convert.ToDateTime("02/04/2013"), Version = null });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "Windows";
mList.Add(mob);
mob = new MobileModel();
modList.Clear();
mob.Brand = "Sony Ericssion";
modList.Add(new MobileModelInfo { Name = "S4", Catagory = "Smart Phone", Year = Convert.ToDateTime("01/05/2011"), Version = 1.0 });
modList.Add(new MobileModelInfo { Name = "S5", Catagory = "Smart Phone", Year = Convert.ToDateTime("08/05/2013"), Version = 1.0 });
modList.Add(new MobileModelInfo { Name = "S6", Catagory = "Ultra Smart Phone", Year = null, Version = null });
mob.Model = new ObservableCollection<MobileModelInfo>(modList);
mob.OS = "Android";
mList.Add(mob);
MobileList = new ObservableCollection<MobileModel>(mList);
MakeDefaultforNull(MobileList);
}
public void MakeDefaultforNull(ObservableCollection<MobileModel> Source)
{
}
}
public class MobileModel
{
private string _brand = string.Empty;
private ObservableCollection<MobileModelInfo> _model = new ObservableCollection<MobileModelInfo>();
private string _os = string.Empty;
public string Brand
{
get { return _brand; }
set { _brand = value; }
}
public ObservableCollection<MobileModelInfo> Model
{
get { return _model; }
set { _model = value; }
}
public string OS
{
get { return _os; }
set { _os = value; }
}
}
public class MobileModelInfo
{
public string Name { get; set; }
public string Catagory { get; set; }
public DateTime? Year { get; set; }
public double? Version { get; set; }
}
我建议您使用setter
在类中处理null
,如下所示:
public class MobileModel
{
private string _brand = string.Empty;
private List<MobileModelInfo> _model = new List<MobileModelInfo>();
private string _os = string.Empty;
public string Brand
{
get { return _brand; }
set {
if (value == null) { _brand = String.Empty; } //You know the type of the variable so you can easily set its default value.
else { _brand = value; } OnPropertyChanged();
}
}
}
您可以使用反射来获取每个属性的数据类型并设置默认值。但这肯定不是最干净的解决方案。