【发布时间】:2021-03-15 19:15:28
【问题描述】:
我正在尝试在插入数据库之前对我的数据执行数据验证(空值检查)。我只是想对我的数据库模型类做一个 foreach 循环,如下所示:
foreach (var item in Insert)
{
if (item.value == null)
// do something
}
我尝试了this 和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 类中的 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
}
所以我正在尝试向我的自定义类添加迭代。
【问题讨论】:
-
我对你的模型类感到困惑。为什么
MyItems包含List<MyItems>?它是一个递归结构吗? -
不一定。我正在寻求一些指导,也许这是错误的处理方式!
-
我无法指导您,因为我无法告诉您您要完成什么。您说您正在尝试检查模型是否存在空值,但代码中的任何地方甚至都没有空值检查。
-
你必须明白,OP,当你说“让 foreach 工作”时,我一点也不知道“工作”是什么意思。您的示例是完全模棱两可的
MyItem,这无济于事。您是否尝试迭代记录、属性或其他内容? -
所以基本上你想检查你的类上的每个 property 以确保它不为空,你想通过 foreach 而不是而不是单独列出它们?您正在寻找反思,但我建议您不要以初学者的身份走这条路。将它们单独列出并继续。
标签: c# ienumerable