我是.NET和C#的新手,我试图弄清楚这段代码的工作原理:

public static string CreateRandomPassword(int PasswordLength)
{
  String _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ23456789";
  Byte[] randomBytes = new Byte[PasswordLength];
  RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
  rng.GetBytes(randomBytes);
  char[] chars = new char[PasswordLength];
  int allowedCharCount = _allowedChars.Length;

  for(int i = 0;i<PasswordLength;i++)
  {
      ///
      /// I don't understand how this line works:
      ///
      chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
  }

  return new string(chars);
}


我认为我在大多数情况下都能很好地处理。我无法理解以下内容:

chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];


我知道代码会生成随机二进制数,并在for循环中使用这些随机数从_allowedChars字符串中选择一个字符。我不明白的是为什么这段代码使用模运算符(%)来获取_allowedChars索引值。

谢谢你的帮助

最佳答案

randomBytes [i]的值可以是0到255之间的任何整数。_allowedChars数组的长度小于255。modules运算符返回将第一个参数((int)randomBytes [i])除以第二个参数的余数。参数(allowedCharCount)。这样可以确保我们使用_allowedChars数组索引的值(取模运算符的结果)始终小于允许的CharacterCount。

09-28 09:52