C# 如何获得随机数

C# 如何获得随机数,c#,.net,random,C#,.net,Random,我想得到20个介于1到100之间的随机数,但是这个数字不应该重复 更新: 如果我有20个名字,其中任意5个可以一个接一个地随机选择,但名字一次又一次地出现而没有人再叫……我大约在一年前问过这个问题 我想,选定的答案非常棒。将数字列在一个列表中,然后从列表中选择: List<int> numbers = Enumerable.Range(1, 100).ToList(); Random rnd = new Random(); List<int> picks = Enum

我想得到20个介于1到100之间的随机数,但是这个数字不应该重复

更新:
如果我有20个名字,其中任意5个可以一个接一个地随机选择,但名字一次又一次地出现而没有人再叫……

我大约在一年前问过这个问题


我想,选定的答案非常棒。

将数字列在一个列表中,然后从列表中选择:

List<int> numbers = Enumerable.Range(1, 100).ToList();

Random rnd = new Random();
List<int> picks = Enumerable.Range(1, 20).Select(n => {
  int index = rnd.Next(numbers.Count);
  int pick = numbers[index];
  numbers.RemoveAt(index);
  return pick;
});
List number=Enumerable.Range(1100.ToList();
随机rnd=新随机();
列表选择=可枚举。范围(1,20)。选择(n=>{
int index=rnd.Next(number.Count);
int pick=数字[索引];
数字。删除(索引);
回采;
});

这可能是最简单的解决方法,但不是最有效的。删除列表中的项目涉及移动以下项目。如果代码多一点,就可以避免这种移动,但对于大多数情况来说,代码已经足够好了。

这不是随机的。随机序列确实有重复的数字。你能澄清一下吗?它不是随机的,但在某些情况下仍然很有用(例如,随机播放专辑中的歌曲而不重复)。你想要随机洗牌,谷歌fisher-yates。也许最好在这里称它为“大部分随机”:4,19,50,3,10,99,7,12,71,28,17,49,83,75,44,37,96,30,15,42