Initializing Lookup<int, string>

Hannah picture Hannah · Mar 2, 2010 · Viewed 21.8k times · Source

How do i declare a new lookup class for a property in the object initializer routine in c#?

E.g.

new Component() { ID = 1, Name = "MOBO", Category = new Lookup<int, string> } 

The category bit always get a compile error.


I have a property called Category that is of the type Lookup<int, string> and I want to instantiate this property via

new Component() { ID = 1, Name = "MOBO", Category = new Lookup<int, string> };

But I cannot get past the compile errors.

Answer

jrotello picture jrotello · Mar 2, 2010

Per MSDN documentation, there is no public constructor for the Lookup class: http://msdn.microsoft.com/en-us/library/bb460184.aspx

You can create an instance of a Lookup<TKey, TElement> by calling ToLookup on an object that implements IEnumerable<T>.

You will want to do something like:

new Component { ID = 1, Name = "MOBO", Category = new[] { … }.ToLookup(…) }

Update to address comments:

I'm not sure where you are getting your category info from, so I will make something up…

new Component {
    ID = 1, 
    Name = "MOBO", 
    Category = new Dictionary<int, string> { 
        { 3, "Beverages" }
        { 5, "Produce" }
    }.ToLookup(o => o.Key, o => o.Value)
}

My guess is that your categories will come from some other source instead of instantiating a dictionary like I did here.