我发现这段代码生成一串随机字符.
但有没有更优雅/更快/更可靠的方式来做到这一点?这似乎依赖于在给定当前编码的情况下数字26-91是有效字符的事实.
/// <summary>
/// Generates a random string with the given length
/// </summary>
/// <param name="size">Size of the string</param>
/// <param name="lowerCase">If true, generate lowercase string</param>
/// <returns>Random string</returns>
private string RandomString(int size, bool lowerCase)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for(int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
if(lowerCase)
return builder.ToString().ToLower();
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 24
我更喜欢将Random
实例传递给方法 - 然后你可以多次重复使用同一个实例,这对于你需要快速连续生成大量随机字符串很重要.但是,我还要修改一下:
public const string LowerCaseAlphabet = "abcdefghijklmnopqrstuvwyxz";
public const string UpperCaseAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static string GenerateUpperCaseString(int size, Random rng)
{
return GenerateString(size, rng, UpperCaseAlphabet);
}
public static string GenerateLowerCaseString(int size, Random rng)
{
return GenerateString(size, rng, LowerCaseAlphabet);
}
public static string GenerateString(int size, Random rng, string alphabet)
{
char[] chars = new char[size];
for (int i=0; i < size; i++)
{
chars[i] = alphabet[rng.Next(alphabet.Length)];
}
return new string(chars);
}
Run Code Online (Sandbox Code Playgroud)
Random.NextDouble()
表示缺乏对Random类的了解.(特别是Random.Next(int, int)
归档时间: |
|
查看次数: |
5138 次 |
最近记录: |