Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将通用列表投影到词典中?_C#_Linq_Generics - Fatal编程技术网

C# 如何将通用列表投影到词典中?

C# 如何将通用列表投影到词典中?,c#,linq,generics,C#,Linq,Generics,是否有一种简单、LINQ唯一的方法可以将泛型集合投影到字典中,从而消除以下代码块中的foreach: Dictionary<int, Player> _rankedPlayers = new Dictionary<int,Player>(); List<Player> rankedPlayers = Player.GetPlayers(Globals.FOOString, seasonCode); int i = 1; fore

是否有一种简单、LINQ唯一的方法可以将泛型集合投影到字典中,从而消除以下代码块中的foreach:

    Dictionary<int, Player> _rankedPlayers = new Dictionary<int,Player>();
    List<Player> rankedPlayers = Player.GetPlayers(Globals.FOOString, seasonCode);
    int i = 1;
    foreach (Player targetPlayer in rankedPlayers)
    {
      _rankedPlayers.Add(i, targetPlayer);
    }
Dictionary\u rankedPlayers=newdictionary();
List rankedPlayers=Player.GetPlayers(Globals.FOOString,季节代码);
int i=1;
foreach(rankedPlayers中的玩家targetPlayer)
{
_添加(i,targetPlayer);
}
您正在寻找方法


您可以使用Enumerable的重载方法。选择生成元素索引的,并使用Enumerable将其投影到字典中。ToDictionary:

var rankedPlayers = Player.GetPlayers(Globals.FOOString, seasonCode)
    .Select((item, index) => Tuple.Create(item, index))
    .ToDictionary(item => item.Item1 + 1, item => i.Item2);
如果您的播放器列表太长,您可能不愿意创建大量的
Tuple
实例并使用外部索引:

var i = 0;
var rankedPlayers = Player.GetPlayers(Globals.FOOString, seasonCode)
    .ToDictionary(i => ++i, item => item.Item2);
尽管这种方法为
i
上的闭包创建了一个新类

如果这对您来说仍然太多,您可以创建自己的扩展:

public static class MyExtensions
{
    public static Dictionary<int, TSource> ToDictionary<TSource>(
        this IEnumerable<TSource> source)
    {
        var dictionary = new Dictionary<int, TSource>();
        var i = 0;
        foreach(var item in source)
        {
            dictionary.Add(++i, item);
        }
        return dictionary;
    }
}
公共静态类MyExtensions
{
公共静态词典(
这是(不可数的来源)
{
var dictionary=newdictionary();
var i=0;
foreach(源中的var项)
{
添加(++i,项);
}
返回字典;
}
}

但是如果你只使用一次,我会像你那样做。

我想你想在每次插入时增加
I
,对吗?我当然想,保罗,忘了增加。然后你在你的问题中更改代码。当你可以使用
KeyVakuePair
Tuple
时,你正在创建一个不必要的类型。
public static class MyExtensions
{
    public static Dictionary<int, TSource> ToDictionary<TSource>(
        this IEnumerable<TSource> source)
    {
        var dictionary = new Dictionary<int, TSource>();
        var i = 0;
        foreach(var item in source)
        {
            dictionary.Add(++i, item);
        }
        return dictionary;
    }
}