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

能否改写这段VB代码?求解释减号星号作用(Option Strict限制)

等价写法与代码逻辑解释

一、兼容Option Strict的等价写法

原代码依赖布尔值与整数的隐式转换,而Option Strict On禁止这类操作,以下是两种符合严格类型检查要求的等价实现:

写法1:直观分支判断(推荐,可读性更强)

Option Strict On

' 假设CurrentFont为Font类型,NewFontStyle为FontStyle枚举
Dim currentFont As Font = CurrentFont ' 替换为你的实际对象引用
Dim newFontStyle As FontStyle = FontStyle.Regular

' 反转下划线状态:原无下划线则添加,原有则移除
If Not currentFont.Underline Then
    newFontStyle = newFontStyle Or FontStyle.Underline
End If

' 保留原粗体状态
If currentFont.Bold Then
    newFontStyle = newFontStyle Or FontStyle.Bold
End If

' 保留原斜体状态
If currentFont.Italic Then
    newFontStyle = newFontStyle Or FontStyle.Italic
End If

写法2:模拟原代码的数值运算逻辑(紧凑写法)

Option Strict On

With CurrentFont
    newFontStyle = _
        CType(If(Not .Underline, -1, 0) * CInt(FontStyle.Underline), FontStyle) _
        Or CType(If(.Bold, -1, 0) * CInt(FontStyle.Bold), FontStyle) _
        Or CType(If(.Italic, -1, 0) * CInt(FontStyle.Italic), FontStyle)
End With

二、原代码中减号与星号的用法解释

核心前提:VB中布尔值隐式转换为整数时,True对应-1,False对应0

1. 星号(*)的作用

星号用于整数乘法,利用布尔转整数的特性实现“条件触发样式值”:

  • 下划线部分:(Not .Underline) * FontStyle.Underline
    • 若当前无下划线(.Underline=False),Not .Underline为True(-1),乘以FontStyle.Underline(对应整数4)得到-4;
    • 若当前有下划线(.Underline=True),Not .Underline为False(0),乘以4得到0。
  • 粗体/斜体部分:.Bold * FontStyle.Bold
    • 若当前是粗体(.Bold=True),转成-1后乘以FontStyle.Bold(对应整数1)得到-1;
    • 若当前不是粗体(.Bold=False),转成0后乘以1得到0。

2. 减号(-)的作用

减号对乘法结果取负,将负数转为正的样式枚举有效值,0则保持不变:

  • 比如-(-4)得到4,正好对应FontStyle.Underline的有效值;
  • -(-1)得到1,正好对应FontStyle.Bold的有效值;
  • 0取负还是0,相当于不添加该样式。

原代码通过累加处理后的值得到目标样式,本质和按位或Or效果一致(FontStyle是位标志枚举)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:05:45