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

VB.NET转C#后switch语句失效 无法实现文件重命名功能

问题根因

  • 你用到的switch(true) + object模式匹配+when子句是C# 7.0版本才新增的特性,如果你的项目目标框架是旧版.NET Framework,默认使用的C#版本低于7.0的话,这段分支逻辑会完全不生效,NewFileName会一直保持初始的空值,最终返回空字符串。
  • 就算语法支持,当前代码没有加兜底逻辑,如果传入的文件名不匹配任何预设后缀规则,也会返回空值。
  • 额外排查点:可以先打印/弹窗确认listbox_1中存储的t.Item2是否是完整带后缀的文件名,避免数据源本身就不符合匹配规则。

修复方案

推荐替换为兼容性更强、逻辑更清晰的if-else写法,同时增加非空校验和兜底逻辑:

private string GetNewName(string OriginalFileName)
{
    // 空值直接返回,避免空引用异常
    if (string.IsNullOrWhiteSpace(OriginalFileName))
        return OriginalFileName;
        
    if (OriginalFileName.Contains(".0001"))
    {
        return OriginalFileName.Replace(".0001", "APPLE");
    }
    else if (OriginalFileName.Contains(".0002"))
    {
        return OriginalFileName.Replace(".0002", "PEAR");
    }
    // 不匹配任何规则时返回原文件名,避免出现空白条目
    return OriginalFileName;
}

如果你确实要保留switch写法,先确认项目C#版本≥7.0,修改为以下写法即可:

private string GetNewName(string OriginalFileName)
{
    if (string.IsNullOrWhiteSpace(OriginalFileName))
        return OriginalFileName;
        
    // 初始值设为原文件名作为兜底
    string NewFileName = OriginalFileName;

    switch (OriginalFileName)
    {
        case string s when s.Contains(".0001"):
            NewFileName = s.Replace(".0001", "APPLE");
            break;
        case string s when s.Contains(".0002"):
            NewFileName = s.Replace(".0002", "PEAR");
            break;
    }

    return NewFileName;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:45:00