예제 #1
0
        /// <summary>
        /// 遍歷屬性 只讓"部分"符合條件者賦值
        /// 當我物件長得有夠像,且賦值來源又都差不多的時候
        /// </summary>
        public void ObjectFiltSetValue()
        {
            //資料參考
            //google 關鍵字 C#遍歷物件屬性
            //如果我要賦值 https://www.itread01.com/content/1546423213.html
            //如果我只是要讀取 https://tedliou.com/archives/csharp-read-all-class-field-by-loop/
            var item  = new NameAlikeModel();
            var value = new ValuesFromMeModel()
            {
                ValueIsString   = "111",
                ValuelikeString = "222",
                ValueString     = "333"
            };

            System.Reflection.PropertyInfo[] properties = item.GetType().GetProperties();
            for (int i = 0; i < properties.Length; i++)
            {
                var properity = item.GetType().GetProperty($"weAreAlike{i + 1}");
                //SetValue 是 PropertyInfo[]原生語法
                properity.SetValue(item, value.ValuelikeString);
            }
            var result = item;


            var cardData = new NameAlikeModel();

            PropertyInfo[] cardDataPara = cardData.GetType().GetProperties();
            for (int j = 0; j < 10; j++)
            {
                cardData.GetType().GetProperty($"WKMALKNDNM6C{j + 1}").SetValue(cardData, "");
                cardData.GetType().GetProperty($"MYMAILNO20X{j + 1}").SetValue(cardData, "");
                cardData.GetType().GetProperty($"WK_IMPDATE{j + 1}").SetValue(cardData, "");
            }

            //var BoxMailKindArr = new[] { "1", "2", "3", "5", "6", "7", "8", "10", "9A", "11", "BC", "DE", "H", "P" };
            //var LostMailKindArr = new[] { "1", "2", "3", "5", "6", "7", "8", "9A", "10", "11", "BC", "DE", "F", "G", "H", "P" };
            //var StateCodeArr = new[] { "1", "2", "3", "4" };
            //foreach (var s in StateCodeArr)
            //{
            //    foreach (var k in LostMailKindArr)
            //    {
            //        if (s == "1")
            //        {
            //            var bxCnt = BoxMails.Where(o => o.STACODE != "D" && o.MALKND == k).Count();
            //            var lmCnt = LostMails.Where(o => o.STACODE != "D" && o.MALKND == k).Count();
            //            ReportPara.GetType().GetProperty($"BXMALKND_{k}_1_7")?.SetValue(ReportPara, bxCnt);
            //            ReportPara.GetType().GetProperty($"LMMALKND_{k}_1_7")?.SetValue(ReportPara, bxCnt);
            //        }
            //        else
            //        {
            //            var bxCnt = BoxMails.Where(o => o.STACODE == s && o.MALKND == k).Count();
            //            var lmCnt = LostMails.Where(o => o.STACODE == s && o.MALKND == k).Count();
            //            ReportPara.GetType().GetProperty($"BXMALKND_{k}_{s}_7")?.SetValue(ReportPara, bxCnt);
            //            ReportPara.GetType().GetProperty($"LMMALKND_{k}_{s}_7")?.SetValue(ReportPara, lmCnt);
            //        }
            //    }
            //}
        }
예제 #2
0
        /// <summary>
        /// 通過遍歷屬性賦值
        /// 練習計時器使用
        /// </summary>
        /// <returns></returns>
        private NameAlikeModel SetValues(List <string> listStr)
        {
            StopWatch = new Stopwatch();
            //Mytimer.Enabled = true;  //啟動計時器 MyTimer.Interval = 1000; //設定計時器時間間隔,單位為ms

            //Mytimer.Start(); //重新計時
            Console.WriteLine("重新計時");
            StopWatch.Start();//重新計時
            var item = new NameAlikeModel();

            // Thread.Sleep(10000); //等個10秒看有沒有跑10秒
            Thread.Sleep(100); //等個0.1秒看有沒有跑0.1秒


            System.Reflection.PropertyInfo[] properties = item.GetType().GetProperties();
            for (int i = 0; i < properties.Length; i++)
            {
                //遍歷物件 賦值1~物件數量數
                properties[i].SetValue(item, listStr[i]);
            }



            Console.WriteLine("停止計時");
            //Mytimer.Stop(); //停止計時
            StopWatch.Stop(); //停止計時
                              // Get the elapsed time as a TimeSpan value.
            TimeSpan ts = StopWatch.Elapsed;

            //Format and display the TimeSpan value. 可以格式化初耗時毫秒、微秒
            string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                               ts.Hours, ts.Minutes, ts.Seconds,
                                               ts.Milliseconds / 10);

            Console.WriteLine("RunTime " + elapsedTime);

            return(item);
        }