C#ToDictionary lambda选择索引和元素?

我有一个像string strn = "abcdefghjiklmnopqrstuvwxyz" ,想要一个字典,如:

 Dictionary(){ {'a',0}, {'b',1}, {'c',2}, ... } 

我一直在尝试这样的事情

 strn.ToDictionary((x,i) => x,(x,i)=>i); 

…但是我一直在得到关于委托的各种错误,没有采用两个参数,以及未指明的参数等。

我究竟做错了什么?

我更喜欢对答案的提示,所以我对下次需要做的事情有一个精神上的痕迹,但根据Stackoverflow的性质,答案也很好。

首先使用.Select运算符:

 strn .Select((x, i) => new { Item = x, Index = i }) .ToDictionary(x => x.Item, x => x.Index); 

我究竟做错了什么?

你假设存在这样的过载。 看看Enumerable.ToDictionary – 没有提供索引的重载。 您可以通过调用Select来伪造它:

 var dictionary = text.Select((value, index) => new { value, index }) .ToDictionary(pair => pair.value, pair => pair.index); 

你可以尝试这样的事情:

  string strn = "abcdefghjiklmnopqrstuvwxyz"; Dictionary lookup = strn.ToCharArray() .Select( ( c, i ) => new KeyValuePair( c, i ) ) .ToDictionary( e => e.Key, e => e.Value );