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;