能否改写这段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
相关产品推荐
相关产品推荐

