標籤

2014年7月23日 星期三

C# reflection & dynamic

小孩子:「 Model 裡面可以用 變數來取代嗎」

卡卡米:「 變數可以取代變數」

卡卡米:「 就寫成 變數 = 變數 即可」

小孩子:「 比如 class cdmis.Models.RPC103 裡面有 SYS_P,SYS_M,SYS_S」

小孩子:「 我在 Controller 裡面」

小孩子:「 抓了 RPC103」

卡卡米:「 你是不是 直接貼 那幾行 code」

卡卡米:「 我讀code 應該比較快」

小孩子:「 貼出來穩定不懂我要做啥的壓 XD」

卡卡米:「 那你繼續講ㄅ」

小孩子:「 
 foreach (RPC103 item in list) { 
  string[] temp = { "SYS_P", "SYS_M", "SYS_S", "SYS_R", "SYS_UM", "SYS_PR", "SYS_MR", "SYS_Z", "SYS_1", "SYS_2", "SYS_3" }; 
  foreach (string tempp in temp) { 
   if (item.tempp == "Y") { 
    item.tempp = "V"; 
   } else { 
    item.tempp = ""; 
   } 
  } 
 }」

小孩子:「 我想做的事」

小孩子:「 但是 tempp 不WORK」

小孩子:「 因為他在 RPC103 找不到這玩意」

卡卡米:「 蛤」

卡卡米:「 你想作的事情」

卡卡米:「 你再描述一次」

卡卡米:「 不要管code 講一下你的需求」

小孩子:「 我要對 Item裡面的資料 做一樣的動作」

小孩子:「 假設 item.SYS_P =Y 我要把它改成 V」

卡卡米:「 好 我知道你要幹麻了」

卡卡米:「 不是這樣寫」

卡卡米:「 但是我要查一下」

小孩子:「 大概就是知道 這個變數要怎麼寫 就WORK了吧」

小孩子:「 不然最蠢的方法就是重複寫N次 不過太蠢了」

卡卡米:「 http://stackoverflow.com/questions/1196991/get-property-value-from-string-using-reflection-in-c-sharp

卡卡米:「 http://stackoverflow.com/questions/6445045/c-sharp-getting-all-the-properties-of-an-object

卡卡米:「 關鍵字 是 reflection」

卡卡米:「 http://stackoverflow.com/questions/4291059/how-to-iterate-on-all-properties-of-an-object-in-c

卡卡米:「 小孩子 : 幹」

卡卡米:「 http://www.jb51.net/article/25863.htm

卡卡米:「 中文版的說明」

小孩子:「 改一半當機了」

小孩子:「 = =?」

小孩子:「 阿 好了」

小孩子:「 剛剛讀取中 幹」

小孩子:「 恩 WORK了」

卡卡米:「 改好的code貼過來給看一下壓」

小孩子:「 等等 我寫完整 我剛剛指定的變數WORK而已」

小孩子:「 感覺怪怪的」

小孩子:「 
 string[] temp = { "SYS_P", "SYS_M", "SYS_S", "SYS_R", "SYS_UM", "SYS_PR", "SYS_MR", "SYS_Z", "SYS_1", "SYS_2", "SYS_3" }; 

 foreach (string tempp in temp) { 
  if (item.GetType().GetProperty(tempp).GetValue(item, null) == "1") { 
  item.GetType().GetProperty(tempp).SetValue(item, "V"); 
  } else { 
   item.GetType().GetProperty(tempp).SetValue(item, ""); 
  } 
 }


小孩子:「 重看一下你剛貼的好了 不太了GetProperty 做啥的」

卡卡米:「 你這樣寫有 work 嗎」

小孩子:「 監看式是得到1沒錯 可是感覺怪怪的」

阿哈:「 志榮在幹嗎阿」

小孩子:「  if (item.GetType().GetProperty(tempp).GetValue(item, null).ToString() == "1")」

小孩子:「 多加個 TOSTRING 就好了 = =」

卡卡米:「 是喔」

卡卡米:「 這麼ez 喔」

小孩子:「 莫名其妙」

小孩子:「 [2014年7月17日 下午 04:55] 小孩子: <<< GetProperty 這是做啥的壓 看他說明還是不太了改」

卡卡米:「 GetValue 傳回的是 Object 吧」

小孩子:「 喔喔 可能喔」

卡卡米:「 中文就是 取得屬性」

卡卡米:「 你要先知道 GetType」

小孩子:「 取得他的TYPE壓 (誤」

卡卡米:「 Type 是類別」

卡卡米:「 Property 是類別下的屬性」

小孩子:「 OK」

卡卡米:「 不是針對某個物件」

小孩子:「 這樣WORK了 3Q拉」

卡卡米:「 所以他後面 GetValue 才要設定 是對 item 作」

小孩子:「 沒問的話 我就會做寫N次的蠢事了 只為了把1改成 Y之類的」

小孩子:「 = =」

卡卡米:「 沒叫你貼 code 的話大概你會跟我講30分鐘」

小孩子:「 奇怪押 GRIDVIEW就不用這麼麻飯」

卡卡米:「 我還不知道你要幹麻」

小孩子:「 麻煩」

小孩子:「 為什麼取 MODELS就這麼龜毛」

卡卡米:「 一般用法會是」

卡卡米:「 物件["屬性名稱"] = 值」

小孩子:「 喔 幹 對 = =」

小孩子:「 失智了 完全不知道我在做啥」

卡卡米:「 可是這樣的寫法 應該不是每個 class 都work的」

小孩子:「 恩 這方法才是萬能解了」

小孩子:「 把名字取好一點了 取temp真沒 sense」

卡卡米:「 http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with-dynamicobject.aspx

卡卡米:「 看看這個吧」

小孩子:「 太多英文了 跳過 (誤」

卡卡米:「 http://blog.darkthread.net/post-2011-06-10-expandoobject.aspx

卡卡米:「 中文的」

小孩子:「 恩 動態存取 太神拉~~」

小孩子:「 卡米: 蛤 看這麼快喔」

卡卡米:「 嗯我都還沒看完」

卡卡米:「 你就看完拉」

小孩子:「 速讀哥」

卡卡米:「 dynamic 以前是 script 語言的特性」

卡卡米:「 js 跟 as 都會這套」

小孩子:「 受教了」

小孩子:「 感恩壓感恩感恩 (任爸樣」

沒有留言:

張貼留言