vb.net - 在 VB.Net 中返回空引用
问题描述
我的程序中有以下方法:
Public Function AddHandlerTo(ByVal compName As String) As System.Object
For Each item In componentList
If item.Name.Equals(compName) Then
AddHandlerTo = item
End If
Next
End Function
正如预期的那样,由于我的Return
语句是嵌套的,我在编译器中收到了警告:
函数“AddHandler”不会在所有代码路径上返回值。使用结果时,可能会在运行时发生空引用异常。
现在这个方法的目的是帮助我(正如方法名称所说)将处理程序添加到不容易访问的特定对象。本质上,其中的每item
一个componentList
都是同一个父对象的不同子对象。无论如何,我在这里的问题并不重要。
我试图弄清楚如何Return
在方法的末尾添加一个最终语句,以便我不再收到错误。如果循环中没有与条件匹配的对象,我希望它返回一个异常,即不存在对象或类似的东西。虽然我不知道如何准确地做到这一点,而且我通过谷歌寻求帮助的能力显然是可怕的。
解决方案
我通常总是使用这样的 return 语句:
Public Function AddHandlerTo(ByVal compName As String) As System.Object
Dim result As Object = Nothing
For Each item In componentList
If item.Name.Equals(compName) Then
result = item
End If
Next
Return result
End Function
或者
Public Function AddHandlerTo(ByVal compName As String) As System.Object
For Each item In componentList
If item.Name.Equals(compName) Then
Return item
End If
Next
Return Nothing
End Function
无论你在哪里调用这个函数,你都会检查它是否返回了一些东西或什么也没有。
推荐阅读
- ruby - 获取原始 rake 任务的名称或传递参数
- fonts - Webfont 生成器 - 希腊字母“μ”的问题
- java - 使用Kafka消费者池是否正确?
- python - Scikit-learn:在超参数调整后对整个数据集使用交叉验证
- php - 按 ID 过滤 XML 文件
- ios - JSON 有问题 - 数据重复
- objective-c - 在 Objective-C 生成的代码中 Protobuf 缺少“列表”后缀
- twilio - Twilio 合并子录音
- javascript - 如何正确递归地遍历磁盘目录并使用node.js将所有相对格式的路径流式传输到json中?
- javascript - 使用 reducer 更新 Redux 中的特定状态