将 foreach (Enumerator, IEnumerable) 添加到数据库模型 class 以进行数据验证
Add foreach (Enumerator, IEnumerable) to database model class for data validation
我正在尝试在插入数据库之前对我的数据执行数据验证(空检查)。我只是想像这样在我的数据库模型 class 上做一个 foreach 循环:
foreach (var item in Insert)
{
if (item.value == null)
// do something
}
我已经尝试了 this and this 的一些变体,但我似乎无法得到我想要的。这是我到目前为止所拥有的。在Main.cs
private void Form1_Load(object sender, EventArgs e)
{
try
{
var i = 0;
var Insert = new MyItems();
foreach (var item in Insert)
{
i++;
Debug.WriteLine(i + ": " + item);
if (item.value == null)
// do something
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
在Model.cs
public class MyItems : IEnumerable<MyItems>
{
List<MyItems> items = new List<MyItems>();
public IEnumerator<MyItems> GetEnumerator()
{
foreach (var item in items)
yield return item;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public string HandleUid { get; set; }
public string TestSpin { get; set; }
public string PartNumber { get; set; }
public string LotNumber { get; set; }
public string MachineName { get; set; }
// plus more items
}
我也这样做过,结果一样。
public class MyItemList
{
}
public class MyItems : IEnumerable<MyItemList>
{
List<MyItemList> items = new List<MyItemList>();
public IEnumerator<MyItemList> GetEnumerator()
{
return items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public string HandleUid { get; set; }
public string TestSpin { get; set; }
public string PartNumber { get; set; }
public string LotNumber { get; set; }
public string MachineName { get; set; }
//...
这只是一个测试程序。在我的真实应用程序中,插入将被填充。当我 运行 这个时,Insert 包含每个元素,但是如果我进入 MyItems class 中的 foreach 循环,计数为零,我有点理解,但为什么 Insert 包含一个项目列表?我觉得我一直在接近解决方案,但无法完成最后一英里。
因此不必为很多项目执行此操作:
if (Myitems.HandleUid.Value === null)
//do something
if (Myitems.TestSpin.Value === null)
//do something
if (Myitems.PartNumber.Value === null)
//do something
if (Myitems.LotNumber.Value === null)
//do something
if (Myitems.MachineName.Value === null)
//do something
etc...
我想这样做:
foreach (var item in Myitems)
{
if (item.value == null)
// do something
}
所以我正在尝试向我的自定义添加迭代 class。
一种方法是使用反射:
void Main()
{
var item = new MyItem()
{
PartNumber = "1",
LotNumber = "2"
};
var properties = typeof(MyItem).GetProperties(BindingFlags.Instance | BindingFlags.Public).Select(x => (Value: x.GetValue(item), Name: x.Name));
foreach (var p in properties)
{
if(p.Value == null)
Console.WriteLine($"Property {p.Name} is null");
}
}
public class MyItem
{
public string HandleUid { get; set; }
public string TestSpin { get; set; }
public string PartNumber { get; set; }
public string LotNumber { get; set; }
public string MachineName { get; set; }
}
我正在尝试在插入数据库之前对我的数据执行数据验证(空检查)。我只是想像这样在我的数据库模型 class 上做一个 foreach 循环:
foreach (var item in Insert)
{
if (item.value == null)
// do something
}
我已经尝试了 this and this 的一些变体,但我似乎无法得到我想要的。这是我到目前为止所拥有的。在Main.cs
private void Form1_Load(object sender, EventArgs e)
{
try
{
var i = 0;
var Insert = new MyItems();
foreach (var item in Insert)
{
i++;
Debug.WriteLine(i + ": " + item);
if (item.value == null)
// do something
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
在Model.cs
public class MyItems : IEnumerable<MyItems>
{
List<MyItems> items = new List<MyItems>();
public IEnumerator<MyItems> GetEnumerator()
{
foreach (var item in items)
yield return item;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public string HandleUid { get; set; }
public string TestSpin { get; set; }
public string PartNumber { get; set; }
public string LotNumber { get; set; }
public string MachineName { get; set; }
// plus more items
}
我也这样做过,结果一样。
public class MyItemList
{
}
public class MyItems : IEnumerable<MyItemList>
{
List<MyItemList> items = new List<MyItemList>();
public IEnumerator<MyItemList> GetEnumerator()
{
return items.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public string HandleUid { get; set; }
public string TestSpin { get; set; }
public string PartNumber { get; set; }
public string LotNumber { get; set; }
public string MachineName { get; set; }
//...
这只是一个测试程序。在我的真实应用程序中,插入将被填充。当我 运行 这个时,Insert 包含每个元素,但是如果我进入 MyItems class 中的 foreach 循环,计数为零,我有点理解,但为什么 Insert 包含一个项目列表?我觉得我一直在接近解决方案,但无法完成最后一英里。
因此不必为很多项目执行此操作:
if (Myitems.HandleUid.Value === null)
//do something
if (Myitems.TestSpin.Value === null)
//do something
if (Myitems.PartNumber.Value === null)
//do something
if (Myitems.LotNumber.Value === null)
//do something
if (Myitems.MachineName.Value === null)
//do something
etc...
我想这样做:
foreach (var item in Myitems)
{
if (item.value == null)
// do something
}
所以我正在尝试向我的自定义添加迭代 class。
一种方法是使用反射:
void Main()
{
var item = new MyItem()
{
PartNumber = "1",
LotNumber = "2"
};
var properties = typeof(MyItem).GetProperties(BindingFlags.Instance | BindingFlags.Public).Select(x => (Value: x.GetValue(item), Name: x.Name));
foreach (var p in properties)
{
if(p.Value == null)
Console.WriteLine($"Property {p.Name} is null");
}
}
public class MyItem
{
public string HandleUid { get; set; }
public string TestSpin { get; set; }
public string PartNumber { get; set; }
public string LotNumber { get; set; }
public string MachineName { get; set; }
}