2009-10-22 64 views
0

我正在将字符串数组更改为字典集合。LINQ中的赋值错误

string str = "When everybody is somebody then no one is anybody"; 

       char[] separation = { ' ', '.', ',' }; 

       var splitted=str.Split(separation); 

(当然这不是一个很好的设计,但我想知道的逻辑)

当我建立查询

var indexed = (from i in Enumerable.Range(1, splitted.Length) 
       from strn in splitted 
       select new { i, strn }).ToDictionary(x => x.i, x => x.strn); 

我收到"Key already found in dictionary"。我提供的唯一键为枚举值 。

回答

1

不,你不提供唯一的密钥。你提供:

1 When 
2 When 
3 When 
... 
9 When 
1 everybody 
2 everybody 

...所以你会被给予“1”作为一个键两次(那么你会供应“2”作为重点再次,如果你曾经得到那么远)。

你究竟想要达到什么结果?如果它是:1 - >当,2 - >大家都等于是你想:

var indexed = splitted.Select((value, index) => new { value, index }) 
         .ToDictionary(x => x.index + 1, x => x.value); 
+0

1时,2各位,3,4人,5然后,6人,7,8人 – udana 2009-10-22 08:37:26

+0

哦! !它是否选择所有可能的组合(1,何时),(2,何时)......上帝! – udana 2009-10-22 08:38:59

+0

你没有提供任何价值的索引,那么你是如何实现结果?它是编译器的魔力?此外,没有开始和结束范围指定!太神奇了,请让我知道这个过程。 – udana 2009-10-22 08:43:03