ugeb
asked on
working with KeyCollection
Hi,
I'm trying to figure out this dictionary keyCollection stuff. All I want is to get a list of all the keys of a dictionary, which is defined as:
private baseDictionary As Dictionary(Of String, Dictionary(Of String, BasicContainer))
where BasicContainer is a small class. What I don't understand is why baseDictionary.Keys() returns something called a KeyCollection instead of a simple list of string? What's the purpose of that? If I have Dictionary(Of String, Tvalue), then does it really matter what Tvalue is? It could be a million different things, but the keys would all still be string. What is the point of this KeyCollection?
This definition of a strongly type KeyCollection makes no sense to me. How can I get a simple List(OF String) or ArrayList or some basic, sensible collection of strings that represent the dictionary keys?
Thanks!
I'm trying to figure out this dictionary keyCollection stuff. All I want is to get a list of all the keys of a dictionary, which is defined as:
private baseDictionary As Dictionary(Of String, Dictionary(Of String, BasicContainer))
where BasicContainer is a small class. What I don't understand is why baseDictionary.Keys() returns something called a KeyCollection instead of a simple list of string? What's the purpose of that? If I have Dictionary(Of String, Tvalue), then does it really matter what Tvalue is? It could be a million different things, but the keys would all still be string. What is the point of this KeyCollection?
This definition of a strongly type KeyCollection makes no sense to me. How can I get a simple List(OF String) or ArrayList or some basic, sensible collection of strings that represent the dictionary keys?
Thanks!
ASKER
Maybe it's the version of vb.net, but I don't have a ToList method in my dictionaries. I'm bound to vb.net 3.0.
I overlooked a little of the magic code that made that work:
using System.Linq;
Without that imports at the top of the code module, ToList will not work, since it is provided by that namespace. I believe that 3.0 has the LINQ extensions. You will need to check that, and let me know if I am correct.
using System.Linq;
Without that imports at the top of the code module, ToList will not work, since it is provided by that namespace. I believe that 3.0 has the LINQ extensions. You will need to check that, and let me know if I am correct.
ASKER
It looks like 3.0 doesn't have linq as I get an error on the using statement. There's a ToArray method available, but in any case it looks like I may just have to continue brute force conversion.
That method was introduced in 3.5. It might be better to use 3.5, rather than 3.0, but that might introduce some breaking changes.
ASKER
Unfortunately I'm using a critical library (NDde) that was written for .net 2.0. I've managed to get .net 3.0, but no further, so 3.5 won't work.
Then, I believe that you will need to use a for loop:
For Each key As String In baseContainer.Keys
For Each key As String In baseContainer.Keys
ASKER
Yes, that was the obvious way and it's what I'm currently doing, but it feels like a big hack and it's slower, uglier, less elegant and less efficient and than a native procedure. That's why I wanted to change. I was using this method before I even asked the question, but I really wanted to know if there was a better way.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I didn't even see that you had posted this response until now. I don't have time to check it out now, but I do see it works in .net 3, so it looks hopeful. Thanks.
Open in new window