[問題] nest dictionary 取值unbox的問題

看板C_Sharp (C#)作者 (bliss)時間12年前 (2013/02/21 22:24), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
小弟最近剛入門C# 不懂之處還請大大們多包涵 由於前陣子在寫python 就想拿C#的Dictionary撰寫成類似python的語法 例如: dict <- {"key1" : {"key2" : value } } 理想的狀況下希望 dict["key"]["key2"] -> value 可以取出value來 為了通用的緣故 我宣告成這樣 class Node : Dictionary< object,object >{ // 多載Add public void Add( object KEY ){ this.Add( KEY, new Node() ); } // 改寫[] public Node this [ object KEY ]{ get{ object RESULT; this.TryGetValue( KEY, RESULT ); // 如果不是末端的話就把 Node傳回去 if( RESULT.GetType().Name == "Node" ){ return (Node)RESULT; } // 如果是末端的話 就把Value傳回去 else{ return RESULT: } } } } 這樣其實已經符合 理想上語法的要求 只是在 改寫[] 運算子的回傳值會有問題 因為[]不能被多載 只能改寫 http://msdn.microsoft.com/zh-tw/library/8edha89s.aspx 目前想到的可能有 1. 回傳值有沒有可能改寫成可回傳任意型態的 類似template那樣 我用過dynamic編譯會有錯誤 var只能用在local 2. 有沒有可能讓C#自己做unbox?? 因為我用GetType().Name 每個object其實都知道自己要用哪一種形態unbox 只是編譯器沒做 是基於什麼樣的原因?? 這功能其實還滿便利的 3. 或是有比較簡明的辦法 可以取這種巢狀Dictionary的值 畢竟我不想看到前面有一堆的unbox語法 謝謝大家 -- 連長:鞋子收好好的怎麼會不見 鞋子會飛是不是 新兵:報告連長,鞋子本來就會飛 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 119.77.130.173 ※ 編輯: hello1988 來自: 119.77.130.173 (02/21 22:25) ※ 編輯: hello1988 來自: 119.77.130.173 (02/21 22:25)

02/21 23:26, , 1F
不知道Dictionary + Tuple (.net 4.0)是不是你要的?
02/21 23:26, 1F

02/22 00:14, , 2F
http://ppt.cc/oRmE 測試環境: C#2010 express
02/22 00:14, 2F

02/22 00:15, , 3F
看來我的環境無法使用Tuple
02/22 00:15, 3F

02/22 00:33, , 4F
2樓我編譯的時候說找不到dynamic所需的一種或多種型別
02/22 00:33, 4F

02/22 00:36, , 5F
有什麼方法可以檢查或排除嗎@@?
02/22 00:36, 5F
文章代碼(AID): #1H9Yue-N (C_Sharp)
文章代碼(AID): #1H9Yue-N (C_Sharp)