Pages - Menu

2020年7月17日 星期五

[C#]動態取得class的屬性名稱

前言

因為覺得一長排的寫下來實在太醜了,
問了一下社群內的人,有人說可以用map對應,有人說是委任。
最後查出來是這個。但我也不知道這個是哪一種XDDD


正文


首先class長這樣

private class car
{
    public DateTime fileDate { get; set; }
    public int time { get; set; }
    public decimal canID { get; set; }
    public int dlc { get; set; }
    public int byte0 { get; set; }
    public int? byte1 { get; set; }
    public int? byte2 { get; set; }
    public int? byte3 { get; set; }
    public int? byte4 { get; set; }
    public int? byte5 { get; set; }
    public int? byte6 { get; set; }
    public int? byte7 { get; set; }
}

本來長這樣

car.byte0 =valCount > 4? Convert.ToInt32(values[4]):0;
car.byte1 =valCount > 5? Convert.ToInt32(values[5]):0;
car.byte2 =valCount > 6? Convert.ToInt32(values[6]):0;
car.byte3 =valCount > 7? Convert.ToInt32(values[7]):0;
car.byte4 =valCount > 8? Convert.ToInt32(values[8]):0;
car.byte5 =valCount > 9? Convert.ToInt32(values[9]):0;
car.byte6 =valCount > 10? Convert.ToInt32(values[10]):0;
car.byte7 =valCount > 11? Convert.ToInt32(values[11]):0;

改完後變這樣

for (int i = 0; i < 8; i++)
{
    if (valCount < i + 3)
        break;
    string propertyName = "byte" + i;
    car.GetType().GetProperty(propertyName).SetValue(car,Convert.ToInt32(values[i+4]));
}

使用GetType().GetProperty的方式去取得欄位。

ref.
Get property value from string using reflection

沒有留言:

張貼留言