2016-05-08 5 views
0

ブールの値を決定するためにコントロールのタグの長さを見つけようとしています。私はコントロールのタグのテキストの長さを取得し、それが1以上の長さを持っているかどうかを判断するいくつかの方法を試しましたが、どれも動作していないようです。それらはすべてSystem.NullReferenceExceptionエラーで終了します。Control.Tagの長さを取得

Boolean = Control.Tag.ToString.Length > 1 
Boolean = Control.Tag.ToString.Count > 1 
Boolean = Not Control.Tag.Equals("") 
Boolean = Not Control.Tag.ToString.Equals("") 

答えて

1

ザッツのでごTagあるNull(またはそれがVB Nothingに呼ばれていたように)。 タグの長さを確認する前に、それがNothingでないことを確認する必要があります。例えばと:

If Control.Tag Is Nothing Then ... 
+0

。ありがとう! – Greg

+0

ようこそ。これで問題が解決した場合は、*この回答を受け入れる*チェックマークをクリックして、この質問に回答してください。 –

+0

はい、私は5分待たなければならないので、タイマーがアップすると私はします! – Greg

1

タグのメソッドやプロパティにアクセスする前に、あなたはタグがNothingではないことを確認する必要があります。あなたは、ショートカットの評価を使用して単一の式でこれを行うことができます。

Dim isDefined As Boolean = Control.Tag IsNot Nothing AndAlso Control.Tag.ToString.Length > 1 

VB 14.0/Visual Studioの2015年以来あなたは

ヌル条件演算子を使用することができます
Dim isDefined As Boolean = If(Control.Tag?.ToString.Length, 0) > 1 
1

をVB.NETであなたはVBを使用することができますVBランタイムがを空の文字列として評価し、String.Emptyで表される.NET固有の方法。

VB.NETでは、値型または参照型であっても、任意の変数にNothingを割り当てることができます。

C#の対応はdefault(T)です。これは参照型ではnullを返し、値型ではすべてのビットがゼロである状態で表される値を返します。例えば。 default(bool)戻りますので、これらの方法にも取り組んでいる

false:ああ、私は今理解して[OK]を、それについて考えていなかった

' 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) 
関連する問題