2

I found an example showing that a dictionary can be initialised as follows:

Dictionary<string, int> d = new Dictionary<string, int>()
{
    {"cat", 2},
    {"dog", 1},
    {"llama", 0},
    {"iguana", -1}
};

I don't understand how the syntax {"cat", 2} is valid for creating a Key-Value Pair. Collection initialisation syntax seems to be of the form new MyObjType(){}, while anonymous objects are of the form {a="a", b="b"}. What is actually happening here?

Casebash
  • 114,675
  • 90
  • 247
  • 350

4 Answers4

7

Alright lets take a look at the code here:

Dictionary<string, int> d = new Dictionary<string, int>() 
{ 
    {"cat", 2}, 
    {"dog", 1}, 
    {"llama", 0}, 
    {"iguana", -1} 
};

a dictionary holds two things, a key, and a value. your declaration, Dictionary<string, int>, means the keys are strings, and the values are integers.

now, when your adding an item, for instance {"cat", 2},, the key is cat. this would be equivilent to you doing something like, d.Add("cat", 2);. a dictionary can hold anything, from <string, string> to <customClass, anotherCustomClass>. and to call it up you can use int CAT = d["cat"]; to which the value of int CAT would be 2. an example of this would be:

Dictionary<string, int> dict = new Dictionary<string, int>() 
{ 
    {"cat", 1}
};
dict.Add("dog", 2);
Console.WriteLine("Cat="+dict["cat"].ToString()+", Dog="+dict["dog"].ToString());

in in there, your adding cat and dog with different values and calling them up

caesay
  • 16,932
  • 15
  • 95
  • 160
1

Dictionary is an ICollection of KeyValuePairs. {"cat", 2} is a KeyValuePair.

Vlad
  • 35,022
  • 6
  • 77
  • 199
1

I'm not really sure what your question is asking, but the answer is that this is the syntax for collection initialization that provides a shortcut to the Add method.

This works too, for example:

new List<DateTime>()
{
    {DateTime.Now},
    {new DateTime()},
    {DateTime.Now}
}

Usually when the question is "why is this valid", the answer is because "it is valid" :)

Note that the syntax you specified in the latter part of the question is not just for anonymous objects, its for any object with public property setters:

new MyPerson("Bob")
{
    Address = "185 What St",
    DoB = DateTime.Now
}
JoshJordan
  • 12,676
  • 10
  • 53
  • 63
0

This is a key value pairing. The Dictionary<string,int> says the key will be a string and the value will be an int. Thus with {"cat", 2} you have a key of "cat" and a value of 2. Why you would have a key of cat and a value of 2, I am not sure, but never the less it is an example of a Dictionary<> with a string key and an int value. More info and examples can be found here:

MSDN Dictionary<> with Examples

Tim C
  • 1,934
  • 12
  • 25