Literal hashes in c#? Literal hashes in c#? ruby ruby

Literal hashes in c#?


If you're using C# 3.0 (.NET 3.5) then you can use collection initializers. They're not quite as terse as in Ruby but still an improvement.

This example is based on the MSDN Example

var students = new Dictionary<int, StudentName>(){    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317, }},    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198, }}};


When I'm not able to use C# 3.0, I use a helper function that translates a set of parameters into a dictionary.

public IDictionary<KeyType, ValueType> Dict<KeyType, ValueType>(params object[] data){    Dictionary<KeyType, ValueType> dict = new Dictionary<KeyType, ValueType>((data == null ? 0 :data.Length / 2));    if (data == null || data.Length == 0) return dict;    KeyType key = default(KeyType);    ValueType value = default(ValueType);    for (int i = 0; i < data.Length; i++)    {        if (i % 2 == 0)            key = (KeyType) data[i];        else        {            value = (ValueType) data[i];            dict.Add(key, value);        }    }    return dict;}

Use like this:

IDictionary<string,object> myDictionary = Dict<string,object>(    "foo",    50,    "bar",    100);


Since C# 3.0 (.NET 3.5) hashtable literals can be specified like so:

var ht = new Hashtable {    { "whatever", new Hashtable {            {"i", 1}     } },    { "and then something else", new Hashtable {             {"j",  2}    } }};