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

C# StringSplitOptions.RemoveEmptyEntries拆分失效、随机数重复问题

问题原因

你的代码存在两个核心逻辑错误,和StringSplitOptions.RemoveEmptyEntries本身的功能无关:

  • 空条目生成无效邮箱的原因:拆分得到cells数组后,你创建了等长的isimler数组,但在内层for循环中每次仅给当前索引i的位置赋值,剩余未遍历到的数组位置全是默认null值,此时就把未填充完成的数组传入了邮箱生成方法,导致随机取数组元素时取到null,拼接后就只剩数字和邮箱后缀。实际上Split方法配置RemoveEmptyEntries参数后已经正确移除了拆分产生的空字符串,问题出在数组传参时机错误。
  • 随机数重复的原因:.NET中Random类默认以系统时钟滴答数作为随机种子,你在每次调用anlamliMail方法时都重新实例化Random,短时间内连续调用时系统时钟还未更新,所有实例的种子完全一致,自然会生成重复的随机数。
修复后代码

Form1 按钮点击事件

char[] ayraclar = { ' ' };
foreach (string row in createdMailList.Items)
{
    // 拆分后直接得到无空值的姓名片段数组
    string[] isimler = row.Split(ayraclar, StringSplitOptions.RemoveEmptyEntries);
    // 移除多余的内层循环,直接传入完整的姓名数组生成邮箱
    listBox1.Items.Add(helper.anlamliMail(isimler));
}

Helper类代码

public static class helper
{
    // 全局只实例化一次Random,避免重复种子问题
    private static readonly Random rnd = new Random();
    public static string anlamliMail(string[] items)
    {
        // 随机取一个姓名片段,拼接随机数字后缀
        string secilenIsim = items[rnd.Next(0, items.Length)];
        int sayiEki = rnd.Next(0, 9999);
        return $"{secilenIsim}{sayiEki}@yahoo.com";
    }
}

修复说明:移除了原代码中无意义的内层循环和未使用的冗余变量,拆分完成后直接传入完整的有效姓名数组;将Random实例提为静态只读字段,整个程序生命周期内只初始化一次,从根源解决随机数重复问题。

内容的提问来源于stack exchange,提问作者Muhammet Sinan Korkut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:48:19