首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对非空值执行NullReference

问对非空值执行NullReference
EN

Stack Overflow用户
提问于 2010-09-28 01:07:43
回答 3查看 236关注 0票数 0

我有一个函数可以得到一个传递给它的字符串。当测试函数时,我在传递给它的字符串参数上得到一个空引用异常,即使字符串不是空的,我也不明白为什么我会得到这个错误。下面是我的屏幕截图

​

​

我使用了一个虚拟值来验证SelectSingleNode函数中的字符串参数和传递给我的函数的newValue字符串参数,它们都包含值,所以我不明白它为什么抛出一个空引用异常。为了清楚起见,该函数的目的是将值写回XML文件的节点。

更新

很抱歉没有发布代码

代码语言:javascript
复制
Private Sub setValue(ByVal nodeToMod As String, ByVal newValue As String)
        ''Test writing to xml config file
        Dim dummy As String = "Config/" & nodeToMod
        Dim xmlDoc As New XmlDocument
        Using fs As FileStream = New FileStream(HttpContext.Current.Server.MapPath("~/XML_Config/Config.xml"), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)
            xmlDoc.Load(fs)
            Dim foo As XmlNode = xmlDoc.SelectSingleNode(dummy)
            Console.WriteLine(foo.InnerXml)
            fs.Seek(0, SeekOrigin.Begin)
            fs.SetLength(0)
            xmlDoc.Save(fs)
        End Using
    End Sub

下面是我正在使用的XML文件

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Username>john.doe@email.com</Username>
  <Password>Password1</Password>
  <ProductType>MyProduct</ProductType>
  <DirectoryEntryPath>LDAP://myDomain</DirectoryEntryPath>
  <SMTPDefaultOnly>True</SMTPDefaultOnly>
  <Logo>myLogo.gif</Logo>
</Config>

是的,SlectSingleNode函数没有返回值。我刚开始使用XPath,这似乎在我上周使用的时候就起作用了。我不确定为什么它现在停止工作了。

UPDATE2:

明白了,愚蠢的错误。在Set方法中,我将用户名作为"UserName“而不是”nodeToMod“传递

代码语言:javascript
复制
        Set(ByVal value As String)
            setValue("UserName", value.ToString)
            _userName = value
        End Set
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-28 01:11:47

被抱怨的空引用是调用SelectSingleNode的结果。也就是说,当针对文档评估由连接/Config/和nodeToMod内容形成的xpath时,没有匹配的节点。因此,您得到null,并且尝试将InnerText设置为null会产生异常。

我们真的需要看到nodeToMod和xml文件本身来提供进一步的帮助。另外,请发布代码而不是截图!

票数 5
EN

Stack Overflow用户

发布于 2010-09-28 01:10:43

确保您正在创建的FileStream对象不会输出为空。也许它找不到config.xml文件?

票数 0
EN

Stack Overflow用户

发布于 2010-09-28 01:13:09

SelectSingleNode的结果很可能是空的。

将该行更改为两行,将更容易在调试器中看到问题:

代码语言:javascript
复制
Dim node = xmlDoc.SelectSingleNode(dummy)
node.InnerText = newValue
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3806080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档