none
屬性名稱連號,能否用字串回圈方式塞值進去嗎? asp.net RRS feed

  • 問題

  •  asp.net

    我有個Class

    裡面假設有6個屬性

            public String Environment_0 { set; get; }
            public String Environment_1 { set; get; }
            public String Environment_2 { set; get; }
            public String Environment_3 { set; get; }
            // public String Environment_4 { set; get; }  // 已經沒有 Environment_4 所以不轉
            public String Environment_5 { set; get; }  
            public String Environment_6 { set; get; }

    因為資料庫裡面存的資料只存在一個欄位Environment,有可能只存 

    0,1,2

    1,3,6

    這個欄位其實是存複選的資料。

    因為現在要丟到BI分析,不得以只好將一個一個欄位拆出來....。

    但我不想這樣寫,因為程式碼會太籠長

    arr = environment.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (string value in arr) { switch (value) { case "0": Environment_0 = YesNoTypes.Yes; break;

    .... 等

     

    以前用VFP開發的時候,VFP有個非常聰明,但又很危險的寫法

    叫做 Macro Substitution

    其實這個我覺得有點像MVC在呼叫method...也是用"字串"組合起來,超級有夠危險的,

    因為編譯的時候不會自動檢查,有人拼錯字就GG... =.=+

     

    它就用字串去組合,最後編譯時,編譯工具會知道其實是在做

    將組合物件跟值的處理。

    突然好懷念VFP

    foreach (string val in arr) {

    stringObj = "Environment_"; &obj + val = YesNoTypes.Yes; // 我記得只要加上 & 最後編譯的時候就知道這個是實體物件。

    }

    請問C#有類似的寫法嗎?

    還是有建議其他作法呢?


    • 已編輯 天氣 2018年1月16日 上午 05:30
    2018年1月16日 上午 02:08

所有回覆

  • 您可以使用C#的索引子存放內容值為陣列的屬性, 請參考:

    索引子 (C# 程式設計手冊)

    2018年1月16日 上午 11:50
  • 能使用 Reflection 來動態設定

    			var obj = new A();
    
    			var arr = environment.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    			foreach (string val in arr)
    			{
    				typeof(A).GetProperty("Environment_" + val).SetValue(obj, "Yes");
    			}

    陣列轉換為一個一個屬性動作很多餘,後續要使用的部分不能直接用陣列嗎?

    2018年2月3日 下午 06:21