You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Random()生成重复随机字符串的原因及解决方法

问题分析与解决方案:重复生成相同随机字符串

这是个很常见的Random使用误区,我来帮你拆解问题和解决办法:

问题成因

你每次调用getRandomLetterNumbers方法时都新建了一个Random实例,但Random默认是用当前系统时钟的“刻度”作为种子来生成随机序列的。你的循环执行速度极快,连续10次调用之间系统时钟根本没来得及更新,所以这些Random实例的种子完全相同,生成的随机数序列也就一模一样,最终拼出来的字符串自然重复了。

解决办法

核心思路是只创建一次Random实例,避免重复初始化导致种子相同。这里有几种实用的实现方式:

方式1:将Random作为类的成员变量

把Random实例声明在类级别,只初始化一次,整个类的方法都复用这个实例:

// 类成员变量,只初始化一次
private Random _random = new Random();

void testfunction() { 
    for (int i = 0; i < 10; i++) { 
        String randomname = getRandomLetterNumbers(10); 
        listBox1.Items.Add(randomname); 
    } 
} 

public String getRandomLetterNumbers(int nrLetterNumbers) { 
    String letters = "abcdefghijklmnopqrstuvwxyz0123456789"; 
    String str = ""; 
    int rand = 0; 
    for (int i = 0; i < nrLetterNumbers; i++) { 
        rand = _random.Next(0, letters.Length); 
        str = str + letters.Substring(rand, 1); 
    } 
    return str; 
}

方式2:将Random作为参数传递给方法

如果不想修改类成员变量,也可以在调用方创建唯一的Random实例,然后传递给生成方法:

void testfunction() { 
    // 只创建一次Random实例
    Random random = new Random();
    for (int i = 0; i < 10; i++) { 
        String randomname = getRandomLetterNumbers(10, random); 
        listBox1.Items.Add(randomname); 
    } 
} 

public String getRandomLetterNumbers(int nrLetterNumbers, Random random) { 
    String letters = "abcdefghijklmnopqrstuvwxyz0123456789"; 
    String str = ""; 
    int rand = 0; 
    for (int i = 0; i < nrLetterNumbers; i++) { 
        rand = random.Next(0, letters.Length); 
        str = str + letters.Substring(rand, 1); 
    } 
    return str; 
}

额外优化:用StringBuilder提升性能

循环里直接拼接字符串效率不高,推荐使用StringBuilder来构建结果,同时可以用索引直接访问字符,代码更简洁:

public String getRandomLetterNumbers(int nrLetterNumbers, Random random) { 
    String letters = "abcdefghijklmnopqrstuvwxyz0123456789"; 
    // 提前指定容量,进一步提升性能
    StringBuilder sb = new StringBuilder(nrLetterNumbers);
    for (int i = 0; i < nrLetterNumbers; i++) { 
        int rand = random.Next(0, letters.Length); 
        sb.Append(letters[rand]);
    } 
    return sb.ToString(); 
}

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:37:07