c#中 如何用List<string>作为Dictionary的key。

(可以跳过此处看“@@”)由于两个方法(A、B)都需要一个字典作为参数,B方法需要用到A方法返回的字典作为参数,但是A、B两个方法的字典的关键字稍有区别:一个key是st... (可以跳过此处看“@@ ”)由于两个方法(A、B)都需要一个字典作为参数,B方法需要用到A方法返回的字典作为参数,但是A、B两个方法的字典的关键字稍有区别:一个key是string,另一个key是一个数组string[])——就像分类的时候,A根据两个字段分类(那么他的key是string[]),B根据一个字段分类(他的key是string),这样如果在B方法中解析A返回的字典的话感觉有点麻烦,所以干脆用List<string>作为key,这样不论list里面可以存储任意多的字段——这样A返回的字典就可以直接当做B的参数了,B就可以直接去解析这个字典,从A返回的字典中的key中取得某一字段作为自己的key。

@@ 本以为天衣无缝,但是在构建List<string>的时候必须先实例化(new)他,然后将这个List<string>作为key存进字典,但是“new”之后,它的地址就变化了,虽然看上去值是一样的,但是当用ContainsKey去判断这个key是否存在的时候无论如何也判断不了!

@@ 请问各位你们有用过List作为key吗?如果碰到像我上面的情况(根据多个字段分类,然后一步步减少分类字段)你们是如何处理的?
可以定义一个类,然后扩展一个方法类似(equal),只是比较某个(些)属性值是否相同就判断其相等,而不是去判断存储的地址。
谢谢150316990 照你说的方法,还是没办法避免实例化啊(new)。还是得扩展方法是关键。
展开
 我来答
百度网友d242235
2011-10-10 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:821万
展开全部
看你的文字直接晕了,List作为key存储进字典的情况确实少见,因为它是引用类型,也就是说你的字典的key是一个引用地址,每次new 这个List对象再做字典判断,那就没什么意义了,原因你自己也讲明白了:地址已经变化。
那么你最好改变一下思路,如果你不能把List<string>作为变量保存的话,那就不要用它做key了,你可以贴上自己的代码,帮看看你的设计思路,看能不能有别的途径解决。
追问
代码太乱了,处理很多东西,就不贴了。
现在的做法是像150316990 说的用分割字符串,这样虽然不能保证百分之百的确保安全,但是自己定义了一个很难去重复的设置,就先这样吧,由于问题快到期了,先结贴了。
谢谢你们啦。
匿名_热心网友
推荐于2016-08-04 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8422万
展开全部
bos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭流
fw.close();
bw.close();
in.close();
bis.close();
out.close();
bos.close();
}
}
追问
这是?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wojiushui123
2011-10-02
知道答主
回答量:58
采纳率:0%
帮助的人:37.3万
展开全部
不懂了 我也学习下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友904b38770
2011-09-28 · 超过36用户采纳过TA的回答
知道答主
回答量:161
采纳率:0%
帮助的人:131万
展开全部
你传进去的是引用

当然不会成功了
更多追问追答
追问
String也是引用类型啊!
是不是像这种情况就没办法用这种方式实现啊?
是的,String的时候如果是new出来的也应该不行,有没有什么办法,不用new呢?
可以在记录的时候缓存一份,判断的时候从缓存的里面去取。——也算是一种办法吧
谢谢。
追答
哪有用List作为key的

你非要这样用的话,用,分割的字符串吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式