Pages - Menu

2020年8月19日 星期三

[c#]宣告 list 為陣列

前言

發生的情況是這樣的,

我有兩個linq語法,查詢出來的類別是一樣的。

之後邏輯判斷也都一樣,最簡單的方式就是,複製貼上。

但這種寫法,一旦下面的邏輯變動的話,要改兩個地方。忘了改的話,怎麼死的都不知道。


正文

先看一下類別長這樣

private class alarmAbs
{
    public DateTime OccurDate { get; set; }
    public double? alarm_num { get; set; }
    public int absVal { get; set; }
}

下面兩個LINQ分別為

List<alarmAbs> a = cars.Where(p => p.OccurDate >= autoRound.Start_OccurDate && p.OccurDate <= autoRound.End_OccurDate)
    .Where(p=>p.canID.Equals(418449793)).Where(p=>p.byte2-128 > 10 )
    .Select(p => new alarmAbs {
        OccurDate = p.OccurDate,
         alarm_num = p.byte2-128,
        absVal =  Math.Abs(Convert.ToInt32(p.byte2-128))
    }).OrderByDescending(p=>p.absVal).ToList();
   
List<alarmAbs> b = cars.Where(p => p.OccurDate >= autoRound.Start_OccurDate && p.OccurDate <= autoRound.End_OccurDate)
    .Where(p => p.canID.Equals(418449793)).Where(p => (p.byte4 - 128) * 0.5 > 50 )
    .Select(p => new alarmAbs
    {
         OccurDate = p.OccurDate,
        alarm_num = (p.byte4 - 128) * 0.5,
        absVal = Math.Abs(Convert.ToInt32((p.byte4 - 128) * 0.5))
    }).OrderByDescending(p => p.absVal).ToList();

 

之後的邏輯都一樣,所以應該是可以用for來代替我執行動作。

重點來了,要把 a 跟 b 弄成陣列表示,這樣後續才能用for去執行。

感謝 Line社群(資訊工程相關討論)的 旋律 大大,他提供了一個連結(An array of List in c#)

可使用

List<int>[] a = new List<int>[100]; 
來宣告a為一個List陣列。
所以變成
List<alarmAbs>[] alarmInAuto = new List<alarmAbs>[2];
alarmInAuto[0] =  

cars.Where(p => p.OccurDate >= autoRound.Start_OccurDate && p.OccurDate <= autoRound.End_OccurDate)

….


 

alarmInAuto[1] =  

cars.Where(p => p.OccurDate >= autoRound.Start_OccurDate && p.OccurDate <= autoRound.End_OccurDate)

 

最後用for帶入

for (int i = 0; i < 2; i++)
{
    if (alarmInAuto[i].Any())
        alarmTime = alarmInAuto[i].First();
    else
        continue;
    ....
}

沒有留言:

張貼留言