Coming from a Java world into a C# one is there a HashMap equivalent? If not what would you recommend?
Coming from a Java world into a C# one is there a HashMap equivalent? If not what would you recommend?
From C# equivalent to Java HashMap
I needed a Dictionary which accepted a "null" key, but there seems to be no native one, so I have written my own. It's very simple, actually. I inherited from Dictionary, added a private field to hold the value for the "null" key, then overwritten the indexer. It goes like this :
public class NullableDictionnary : Dictionary<string, string>
{
string null_value;
public StringDictionary this[string key]
{
get
{
if (key == null)
{
return null_value;
}
return base[key];
}
set
{
if (key == null)
{
null_value = value;
}
else
{
base[key] = value;
}
}
}
}
Hope this helps someone in the future.
==========
I modified it to this format
public class NullableDictionnary : Dictionary<string, object>
Use Dictionary - it uses hashtable but is typesafe.
Also, your Java code for
int a = map.get(key);
//continue with your logic
will be best coded in C# this way:
int a;
if(dict.TryGetValue(key, out a)){
//continue with your logic
}
This way, you can scope the need of variable "a" inside a block and it is still accessible outside the block if you need it later.
I just wanted to give my two cents.
This is according to @Powerlord 's answer.
Puts "null" instead of null strings.
private static Dictionary<string, string> map = new Dictionary<string, string>();
public static void put(string key, string value)
{
if (value == null) value = "null";
map[key] = value;
}
public static string get(string key, string defaultValue)
{
try
{
return map[key];
}
catch (KeyNotFoundException e)
{
return defaultValue;
}
}
public static string get(string key)
{
return get(key, "null");
}