c#中 如何用List<string>作为Dictionary的key。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中 如何用List<string>作为Dictionary的key。相关的知识,希望对你有一定的参考价值。
(可以跳过此处看“@@ ”)由于两个方法(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)。还是得扩展方法是关键。
那么你最好改变一下思路,如果你不能把List<string>作为变量保存的话,那就不要用它做key了,你可以贴上自己的代码,帮看看你的设计思路,看能不能有别的途径解决。追问
代码太乱了,处理很多东西,就不贴了。
现在的做法是像150316990 说的用分割字符串,这样虽然不能保证百分之百的确保安全,但是自己定义了一个很难去重复的设置,就先这样吧,由于问题快到期了,先结贴了。
谢谢你们啦。
catch (Exception e)
e.printStackTrace();
finally
//关闭流
fw.close();
bw.close();
in.close();
bis.close();
out.close();
bos.close();
追问
这是?
本回答被提问者采纳 参考技术B 不懂了 我也学习下 参考技术C 你传进去的是引用当然不会成功了追问
String也是引用类型啊!
是不是像这种情况就没办法用这种方式实现啊?
是的,String的时候如果是new出来的也应该不行,有没有什么办法,不用new呢?
可以在记录的时候缓存一份,判断的时候从缓存的里面去取。——也算是一种办法吧
谢谢。
哪有用List作为key的
你非要这样用的话,用,分割的字符串吧
我目前就是用的这种方法,但是不是很完美,因为 两对不同字段拼出来的字符串可能出现相同的,暂且这样吧。谢谢你。
追答自定义一个类
把泛型作为一个成员封装进去
然后把这个类的对象作为key
以上是关于c#中 如何用List<string>作为Dictionary的key。的主要内容,如果未能解决你的问题,请参考以下文章