获取Control.Tag的长度

时间:2016-05-08 16:41:51

标签: vb.net

我试图找到控件标签的长度来确定布尔值。我已经尝试了几种方法来获取控件中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("")

3 个答案:

答案 0 :(得分:1)

这是因为您的TagNull(或者在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)