初始化Lookup <int,string>

Han*_*nah 23 c# linq lookup class

如何在c#中的对象初始化程序例程中为属性声明一个新的查找类?

例如

new Component() { ID = 1, Name = "MOBO", Category = new Lookup<int, string> } 
Run Code Online (Sandbox Code Playgroud)

类别位总是会出现编译错误.


我有一个叫做财产Category是类型的Lookup<int, string>,我想通过实例化这个属性

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

但我无法克服编译错误.

jro*_*llo 22

根据MSDN文档,Lookup该类没有公共构造函数:http://msdn.microsoft.com/en-us/library/bb460184.aspx

您可以Lookup<TKey, TElement> 通过调用ToLookup 实现的对象来创建a的实例IEnumerable<T>.

你会想做类似的事情:

new Component { ID = 1, Name = "MOBO", Category = new[] { … }.ToLookup(…) }
Run Code Online (Sandbox Code Playgroud)

更新以解决评论:

我不确定你从哪里获得类别信息,所以我会做些什么...

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

我的猜测是你的类别将来自其他来源,而不是像我在这里实例化一个字典.


dug*_*gas 8

来自MSDN:

没有公共构造函数来创建a的新实例Lookup<TKey, TElement>.
此外,Lookup<TKey, TElement>对象是不可变的,也就是说,Lookup<TKey, TElement>在创建对象后,无法在对象中添加或删除元素或键.