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

求助:修正VB.NET中判断字符串末尾字符为‘s’并截取的代码(从Excel VBA迁移)

解决VB.NET中用户名处理的If语句错误问题

嘿,我来帮你修正这段VB.NET代码里的问题!你的核心逻辑思路是对的,但If语句里有几处关键错误,咱们一步步梳理调整:

错误点拆解

  1. 方法调用错误:VB.NET里没有Str.Last(UserName)这种写法,要获取字符串的最后一个字符,你可以用字符串索引(UserName(UserName.Length - 1)),或者LINQ的Last()扩展方法(默认项目一般已引用System.Linq,无需额外配置)。
  2. 类型不匹配:Last()返回的是Char类型,你用字符串"s"直接比较会触发类型错误,应该用字符字面量"s"c(末尾加c表示字符类型)。
  3. 语法冗余:如果用单行If...Then写法,不需要单独的End If;如果要把执行语句单独换行,就必须用End If闭合整个语句块。

修正后的代码

这里提供两种可靠的写法,你可以根据习惯选择:

写法1:使用LINQ的Last()方法(简洁直观)

Imports System.Linq ' 若项目未自动导入则需添加这句

Dim UserName As String
UserName = Split(Environment.UserName, " ")(0)
' 先判断用户名不为空,避免索引越界
If UserName.Length > 0 AndAlso UserName.Last() = "s"c Then
    UserName = UserName.Substring(0, UserName.Length - 1)
End If

写法2:使用字符串索引(兼容性更好,无需依赖LINQ)

Dim UserName As String
UserName = Split(Environment.UserName, " ")(0)
' 先判断长度,防止极端空值情况触发异常
If UserName.Length > 0 AndAlso UserName(UserName.Length - 1) = "s"c Then
    UserName = UserName.Substring(0, UserName.Length - 1)
End If

额外优化小技巧

如果你想让代码更紧凑,可以用三元运算符一行完成逻辑:

Dim UserName As String = Split(Environment.UserName, " ")(0)
UserName = If(UserName.Length > 0 AndAlso UserName.Last() = "s"c, UserName.Substring(0, UserName.Length - 1), UserName)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:27:35