Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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中向新列表添加元素范围#_C#_List - Fatal编程技术网

C# 在C中向新列表添加元素范围#

C# 在C中向新列表添加元素范围#,c#,list,C#,List,新来的程序员。我正在尝试向C#中的新列表添加一系列元素。这是为了一场我在团结中制作的游戏。这是一款基于旧的诺基亚蛇游戏的游戏,蛇每次吃水果都会变长。此信息存储在我的游戏列表中。现在的问题是,我正在尝试创建一个游戏元素,在某个点上,蛇的所有节点(基本上是尾巴)都脱离了蛇本身,而蛇还有3个元素(头部、身体和尾巴)。我让它工作得非常好,除了我不能让列表中的节点范围在我的一生中转移到新节点列表 for (int i = 0; i < nodes.Count; i++) { if (node

新来的程序员。我正在尝试向C#中的新列表添加一系列元素。这是为了一场我在团结中制作的游戏。这是一款基于旧的诺基亚蛇游戏的游戏,蛇每次吃水果都会变长。此信息存储在我的游戏列表中。现在的问题是,我正在尝试创建一个游戏元素,在某个点上,蛇的所有节点(基本上是尾巴)都脱离了蛇本身,而蛇还有3个元素(头部、身体和尾巴)。我让它工作得非常好,除了我不能让列表中的节点范围在我的一生中转移到新节点列表

for (int i = 0; i < nodes.Count; i++)
{
    if (nodes.Count > 3)
    {
        newNodes.Add(nodes[4]);
        newNodes.Add(nodes[5]);
        newNodes.Add(nodes[6]);

        newNodes.AddRange(nodes[3], nodes.Count - 3);
        nodes.RemoveRange(3, nodes.Count - 3);                    
    }
for(int i=0;i3)
{
添加(节点[4]);
添加(节点[5]);
添加(节点[6]);
AddRange(节点[3],节点数-3);
nodes.RemoveRange(3,nodes.Count-3);
}
当我运行游戏时,预期的行为适用于
newNodes.Add(单个节点)
。但我希望看到发生的是类似
newNodes.AddRange(节点[3],节点数-3)的事情
但这不起作用。我怎样才能得到它,使它从3或2或任何值读取列表中的节点总数。我已经坚持了好几天了!真的需要一些帮助/输入

上面的代码不完整,它实际上是协同程序的一部分,在满足某些条件后应该调用它。只是我想知道是否有任何方法可以做到这一点?

试试这个:

newNodes.InsertRange(newNodes.Count - 1, nodes.GetRange(3, nodes.Count - 3));
nodes.RemoveRange(3, nodes.Count - 3);
如果newNodes为空,则需要确保将0作为索引传递,而不是

newNodes.Count - 1

使用LINQ扩展方法,您可以跳过列表的第一部分并获取其余部分。由于它是一种扩展方法,您首先需要在代码文件顶部附近使用此方法:

using System.Linq;
然后,您可以使用此选项将除前三项之外的所有项目添加到新列表中:

newNodes.AddRange(nodes.Skip(3));
注意:这不会以任何方式更改“节点”


额外好处:如果“节点”包含3项或更少,则不会失败(但当然不会向新节点添加任何内容)

问题在于使用

newNodes.AddRange(nodes[3], nodes.Count - 3);

您只提供索引3处的单个节点。AddRange需要一个IEnumerable,而不是列表中的单个对象。要获取IEnumerable,您必须使用其他人发布的GetRange或LINQ方法。

如前所述,我是一名新程序员,从未使用过Stackoverflow。suc中的所有响应确实让我不知所措很快,感谢大家花时间阅读我的问题,并试图与我一起解决它

在我的案例中似乎有效的代码是

newNodes.InsertRange(newNodes.Count, nodes.GetRange(3, nodes.Count - 3));
它基本上捕获列表中的所有节点(蛇身),并在新列表中正确释放它们


再次感谢!!

所以你想从一个列表中删除尾部跳过(3),并将它们添加到另一个列表中?为什么要使用
for
-循环?你从来没有使用过
int i
(在你发布的代码中)@HansKest将其仅用于演示,我会回答客人。+1表示“注意”和“奖金”.我必须通过0而不是-1,但是天哪,它成功了!!这正是我想要的!!非常感谢你的帮助!!你不会相信我花了多少时间才弄明白!!!如果我的答案对你有帮助,请投票:)我立即投票支持你的答案!但是它说“感谢您的反馈!声誉低于15的人所投的票将被记录,但不会更改公开显示的帖子分数。“所以我希望你仍然能获得投票权。很抱歉,我是StackOverflow的新手。啊,没关系,试着回答其他问题,这样你就会获得声誉。如果我能在某个问题上帮助别人,我一定会这样做!再次感谢!