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
相关产品推荐
相关产品推荐

