簡體   English   中英

將 foreach (Enumerator, IEnumerable) 添加到數據庫 model class 進行數據驗證

[英]Add foreach (Enumerator, IEnumerable) to database model class for data validation

我正在嘗試在插入數據庫之前對我的數據執行數據驗證(空值檢查)。 我只是想對我的 DB model class 做一個 foreach 循環,如下所示:

foreach (var item in Insert)
{
    if (item.value == null)
    // do something
}

我已經嘗試了這個這個的一些變體,但我似乎無法得到我想要的。 這是我到目前為止所擁有的。 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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM