Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 获取列表中的项目<;T>;从索引,但循环列表_C#_Linq - Fatal编程技术网

C# 获取列表中的项目<;T>;从索引,但循环列表

C# 获取列表中的项目<;T>;从索引,但循环列表,c#,linq,C#,Linq,如果我有名单 List fruits=new List(){“苹果”、“梨”、“香蕉”} 我怎样才能改变 inti=0; while(true) { 控制台写入线(水果[i]); i++; } 输出 apple pear banana apple pear banana ... 而不是在我们到达列表的末尾时生成索引超出范围的异常 在我的实际代码中,我有数百个不同大小的列表。我有一个计时器,它定期调用一个方法,该方法需要从每个列表返回一个值,以确保最终每个列表中的所有项都以相同的频率返回 因

如果我有名单

List fruits=new List(){“苹果”、“梨”、“香蕉”}
我怎样才能改变

inti=0;
while(true)
{
控制台写入线(水果[i]);
i++;
}
输出

apple
pear
banana
apple
pear
banana
...
而不是在我们到达列表的末尾时生成索引超出范围的异常

在我的实际代码中,我有数百个不同大小的列表。我有一个计时器,它定期调用一个方法,该方法需要从每个列表返回一个值,以确保最终每个列表中的所有项都以相同的频率返回

因为
i
最终会变得很大,下面的解决方案不是最优的

inti=0;
while(true)
{
int a=i;
而(a>水果。计数)
{
a-=水果。计数;
}
控制台写入线(水果[a]);
}
以下是我需要修复的实际代码:

private static int\u purgeNumber;
私有静态异步任务GetRowsToPurgeAsync()
{
List rows=WAIT Database.Data.Autopurge.GetRowsAsync(enabledOnly:true);
List rowstopuke=新列表();
foreach(SocketGuild in_client.Guilds)
{
if(rowsToPurge.Count(x=>x.GuildId==guild.Id)==0)
{
列出guildRows=rows.Where(x=>x.GuildId==guild.Id).OrderBy(x=>x.ChannelId.ToList();
AutoPergerRow行=GuidRows[\u权限成员%GuidRows.Count];
rowsToPurge.Add(行);
}
_purgeNumber++;
如果(_purgeNumber==int.MaxValue)_purgeNumber=0;
}
返回Rowstopush;
}
一种更有效的方法(而且更正确,因为
应该是
=
)是当
i
除以
水果时,取余数。使用
%
运算符进行计数:

int a = i % fruits.Count;

@正如我在问题中所说,它需要处理多个具有一个值i的列表。
i=(i+1)%fruits.Count
“解决方案需要处理多个不同大小的列表”——不清楚您的意思。你能不能让你的问题包含演示你实际问题的示例代码,而不是使用更简单的示例代码和含糊的陈述,说明你的实际问题如何更复杂?为什么不使用for loop?@canton7抱歉,我已经做了编辑,以使其更清楚。
int a = i % fruits.Count;