作者hello1988 (bliss)
看板C_Sharp
标题[问题] nest dictionary 取值unbox的问题
时间Thu Feb 21 22:24:27 2013
小弟最近刚入门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)
1F:推 evirtues:不知道Dictionary + Tuple (.net 4.0)是不是你要的? 02/21 23:26
3F:→ hello1988:看来我的环境无法使用Tuple 02/22 00:15
4F:→ hello1988:2楼我编译的时候说找不到dynamic所需的一种或多种型别 02/22 00:33
5F:→ hello1988:有什麽方法可以检查或排除吗@@? 02/22 00:36