我试图找到控件标签的长度来确定布尔值。我已经尝试了几种方法来获取控件中Tag的文本长度,并确定它是否具有1或更高的长度,但它们似乎都没有工作。它们最终都会出现System.NullReferenceException
错误。
Boolean = Control.Tag.ToString.Length > 1
Boolean = Control.Tag.ToString.Count > 1
Boolean = Not Control.Tag.Equals("")
Boolean = Not Control.Tag.ToString.Equals("")
答案 0 :(得分:1)
这是因为您的Tag
是Null
(或者在VB Nothing
中调用)。
因此,在检查标记的长度之前,您需要确保它不是Nothing
。例如:
If Control.Tag Is Nothing Then ...
答案 1 :(得分:1)
在访问代码的方法或属性之前,您必须确保代码不是Nothing
。您可以使用快捷方式评估在单个表达式中执行此操作:
Dim isDefined As Boolean = Control.Tag IsNot Nothing AndAlso Control.Tag.ToString.Length > 1
从VB 14.0 / Visual Studio 2015开始,您可以使用Null条件运算符
Dim isDefined As Boolean = If(Control.Tag?.ToString.Length, 0) > 1
答案 2 :(得分:1)
在VB.NET中,您可以使用VB.NET特定方式,因为VB Runtime将Nothing
评估为由String.Empty
表示的空字符串。
在VB.NET中,您可以将Nothing
分配给任何变量,无论它是值类型还是引用类型。
它的C#等价物为default(T)
,对于引用类型返回null
,对于值类型,返回由所有位为零的状态表示的值。例如。 default(bool)
返回false
所以这些方法也有效:
' Let's assume you set the Control.Tag property value to this variable
Dim controlTag As Object = Nothing
' Len() method can accept any Object
Dim controlTagLength As Integer = Len(controlTag)
Dim hasValueByLength As Boolean = controlTagLength > 0
' Always call Equals() method on a constant
' or on a well defined non-null value e.g. String.Empty
' to avoid NullReferenceException
Dim hasValueByInstanceEquals As Boolean = String.Empty.Equals(controlTag)
' Or you can use the static Equals() method that accepts Object
Dim hasValueByStaticEquals As Boolean = String.Equals(controlTag, String.Empty)