为什么Return关键字在VB.NET中不起作用?为什么我的变量的值= Nothing?

时间:2011-05-20 16:11:45

标签: .net vb.net variables variable-declaration option-explicit

我有以下功能。
当我调用getQueryObject(jsonString)它使coll解析对象然后返回。 jsonObject的分配无效。当我开始对jsonObject bariable进行操作时,它的值为 nothing 。 我运行Debug并遵循代码,jsonObject中的getQueryObject没有失败。并返回说它返回对象。

我是VB的新手还有我缺少的东西吗?

Public Function getInformation(jsonString as string) as string
    Dim jsonObject As JObject
    jsonObject = getQueryObject(jsonString)
    'Operate on object here.
End Function

Private Function getQueryObject(jsonString as string) As JObject
    Dim jsonObject As JObject
    Try
        jsonObject = JObject.Parse(jsonString)

    Catch ex As Exception
        jsonObject = New JObject
    End Try
    Return jsonObject
End Function

更多信息。我打开选项严格后,我开始收到错误消息。 Option Strict On禁止从'Newtonsoft.Jsont.Linq.Token到Newtonsoft.Json.Linq.JObject'的隐式转换。

我不知道我在哪里进行任何类型的转换。

2 个答案:

答案 0 :(得分:2)

问题是您在getInformation函数中使用了错误的变量名称。

将代码更改为如下所示:

Public Function GetInformation(jsonString as string) as string
    Dim jsonObj As JObject
    jsonObj = GetQueryObject(jsonString)  // Change the name of this variable
                                          // to match the declaration above it.
    'Operate on object here.
End Function

甚至更简单,在同一行中声明并初始化变量:

Public Function GetInformation(jsonString as string) as string
    Dim jsonObj As JObject = GetQueryObject(jsonString)
    'Operate on object here.
End Function

如果你编译你用Option ExplicitOption Strict同时打开代码,编译器会抓住这个问题你。在项目的属性中更改这些设置。 从不 在VB.NET中编写代码并关闭Option Explicit。意外的事情发生了。

正在发生的事情是VB.NET允许您使用jsonObject变量而不会声明它。编译器只是在幕后自动将其初始化为Nothing,这是默认值。这是一个很简单的错误,因为这是其他方法中变量的名称。但它没有按预期工作,因为它不是 this 方法中变量的名称。只要你Option Explicit关闭,VB.NET就不会警告你,并且幸福地编译错误的代码。

(请注意,我也跟所有驼峰规则方法名的建议的.NET编码约定。这意味着,他们应该用的资本的信,而不是一个小写字母开头。只有本地变量和参数应该是pascalCased(初始小写)。)

答案 1 :(得分:0)

Public Function getInformation(jsonString as string) as string
    Dim jsonObj As JObject
    jsonObject = getQueryObject(jsonString)
    'Operate on object here.
End Function

jsonObject是全局声明的吗?