这应该是社区维基问题。
我最近不得不与很多vb.net合作,最近创建了以下表达式。
If If(report.IsPublicReport, False) Then Return True
现在,这是一个if语句中的简单合并,没什么好害怕的。然而,当我正在扫描方法寻找我所犯的错误时,这条线会不断地阻止我死在我的轨道上。我无法扫描它。每次我不得不停下来,在我脑海里手动打破它。很大程度上是因为我不得不停下来弄清楚每个If
在表达式中实际做了什么。
我已将该行重写为
If report.IsPublicReport.GetValueOrDefault() Then Return True
虽然更加冗长,但我发现在扫描代码时,这会扰乱我的思路。
这让我想到了,
答案 0 :(得分:2)
只要您对VB.NET语法感到不舒服,我就强烈建议您使用Option Strict On,这样您就可以更快地捕获这些错误。最好的方法是全局更改它,因此它默认情况下始终处于打开状态。工具+选项,项目和解决方案,VB默认值,将选项严格更改为“开”。
答案 1 :(得分:2)
你所描述的是Scott Hanselman(可能还有其他人)称之为“Code smell”的东西。
基本上这个想法是,当你看一段代码时,某些东西对它来说似乎并不“正确”。这不是开发人员“拥有”的能力。随着您阅读和编写越来越多的代码,这是您随着时间的推移而发展的。
这也不仅仅是VB,你会看到每种语言中都会有很多习惯性的结构,它们会(或者应该)让你停下来并质疑你在看什么。
Double IF肯定会为我做这件事
答案 2 :(得分:1)
在Vb.NET中,你可以写:
row!FirstName = "Test"
而不是
row("FirstName") = "Test"
不久之前我曾经写过row!FirstName
(你可以用一个字符串参数可以访问的集合中的每个项目来做到这一点)因为我认为这是一个好主意,因为它看起来更静态类型(像person.FirstName
作为财产一样)并且更短。
但是我意识到这不是一个好主意,因为在将“FirstName”更改为“Name”后,我经常在当前文件中查找在Visual Studio中高位的String(对象!param语法不是)。 这使他们更难找到。
答案 3 :(得分:1)
你可以写
Private Sub Form1_Load() Handles MyBase.Load
End Sub
而不是
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
如果你不需要发送者或e(我认为它只是一些编译器魔法添加了签名本身)这很好,但我拒绝使用较短的方式,因为你不认识它作为事件处理程序在第一眼。