我通常在vb.net中将我的字符串变量定义为
Dim f_sName as string=String.Empty
f_sName = "foo"
鉴于.net中字符串的不可变性,是否有更好的方法来初始化字符串并处理“变量'f_sName'在它被赋值之前使用。空引用异常可能在运行时产生。”警告?
对于没有不接受任何参数的构造函数的类,如System.Net.Sockets.NetworkStream,定义和初始化该类型变量的最佳方法是什么?
答案 0 :(得分:3)
这与不可变的字符串无关。
更好首选模式将是
Dim f_sName as string = "Foo"
但是如果可以使用它,则取决于具体情况。
与Nothing或Empty初始化相同。如果你想尽早发现错误,那么:
关于像NetworkStream这样的类,同样的事情:不要创建实例,也不要在需要之前声明变量。对于像NetworkStream这样的Disposable类,这意味着使用Using子句:
Using fs As New NetworkStream(....)
End Using
在狭窄范围之外提供“fs”既不可取也不有用。
答案 1 :(得分:1)
将字符串初始化为null和String.Empty几乎是一回事。就个人而言,我认为将其设置为string.empty确实是处理它的最佳方式。将其设置为null将导致抛出空引用异常,但将其设置为String.Empty则不会。
人们可以争论以两种方式初始化它的优点,但优化方面没有明显的区别。
答案 2 :(得分:1)
Dim f_sName as String = Nothing
或
Dim f_sName As New String()
顺便说一句:混合mixedCase
变量命名与underscores
(如在f_sName中)在大多数情况下看起来很奇怪,这个变量名称代表什么?