我是一个相对的 VB.Net 菜鸟,我正在边做边学。我确定我要问的问题之前已经被问过 10^19 次,但无论它是什么代码字,我都不知道如何用谷歌搜索它。开始...
我们有一个对象模型,其中包含一个或多个项目对象,该对象由多个表组成,其中包含具有字段的行。这导致我们的应用程序中的代码看起来像这样......
Dim theColor As String = Projects(1).Tables(5).Rows(22).Fields(3)
在我们的应用程序中,如果此“调用链”中的任何对象不存在,则 theColor 的正确值应该是Nothing*。这就像 Excel - 空行中的空单元格的值是 vbnull,而不是“Excel 已崩溃”。
然而,这不是 VB.Net 的工作方式。例如,如果 Rows(22) 不存在,则在 Nothing 上调用 Fields(3) 并引发异常。我的问题是如何最好地处理这个......
1)我可以检查每个值以查看它不是Nothing,但这会导致大量代码......
If Projects(1) IsNot Nothing AndAlso Projects(1).Tables(5) AndAlso...
我们有数千个这样的代码,这将需要大量的代码。
2) 我可以将所有访问器包装在 try/catch 中,但这实际上只是一种不同的 (1)
3)我可以拥有每个具有空值的对象的特殊实例。因此,例如,Tables(5) 返回 NullTable,Row(22) 返回 NullRow。但这意味着我必须始终使用访问器方法,我不能只查看底层数组。您可能说得很好,但遗憾的是,我们的许多旧代码就是这样做的(是的,duh)。
4)完全不同的东西?我是否错过了一些除我之外的人都知道的魔法?