【发布时间】:2013-06-21 07:03:06
【问题描述】:
我有一个树视图,其中一些树节点将一个字符串保存到它们的标签对象中,而一些标签则什么都没有。稍后我想在它们存在的节点中使用字符串。
For Each tn As TreeNode In TreeView1.Nodes
If Not String.IsNullOrWhiteSpace(tn.Tag) Then
Call DoTagStringStuff(tn.Tag)
End If
Next tn
在我需要打开选项 strict 以使我的代码与同事项目兼容之前,这一直很好。我对如何最好地从 treenode.tag 对象中解开字符串感到有些困惑。
错误弹出窗口建议使用CStr,但我的印象是CStr 函数只是在VB.net 中作为对VB6 的回归,并且真的不应该用于新代码。如果我在上面的代码中尝试 tn.Tag.toString,当它无法计算 Nothing.toString 时,我会在运行时收到错误。
解决此问题的正确方法是什么?我是否应该首先使用标记对象来保存字符串值,或者是否有更好的不需要拆箱的树节点属性可以用于此?
编辑:我认为这可能是正确的?
For Each tn As TreeNode In theNode.Nodes
If tn.Tag IsNot Nothing Then
Call DoTagStringStuff(DirectCast(tn.Tag, String))
End If
Next tn
除了我不再检查空字符串或只有空格字符串。
【问题讨论】:
-
不,CStr() 不是回归。如果您愿意,可以改用对象的 ToString() 方法。它实际上是 VB6 回归的 Tag 属性。通常,您可以通过将模型与视图分离来避免使用它。
-
Tag出现在大多数(如果不是全部)控件上。我看不出在某些情况下使用它有什么问题。我不知道 TS 的情况,但它本身并不是倒退;)。
标签: vb.net string treenode unboxing