提问人:Abraham Murciano Benzadon 提问时间:7/24/2020 最后编辑:Abraham Murciano Benzadon 更新时间:7/24/2020 访问量:457
C# NullReferenceException,但没有任何内容为 null
C# NullReferenceException but nothing is null
问:
我有一个 C# 类,其中包含如下所示的字段和属性。
public static class Config {
// ...
private static string admin_email;
public static string AdminEmail {
get {
if (admin_email == null) {
admin_email = config_xml.Element("admin_email").Value;
// ^ The exception is thrown here.
}
return admin_email;
}
}
}
在上面的代码中,是一个 XElement,它包含一个子元素,如下所示config_xml
<admin_email>[email protected]</admin_email>
但是,当我尝试访问此属性时,即使调试器显示没有任何内容为 null,我也会得到一个。NullReferenceException
我检查了调试器,并按预期显示电子邮件。config_xml.Element("admin_email").Value
奇怪的是,当我在那行上放置一个断点并一步一步地单步执行时,不会抛出异常。
我尝试过启用和不启用“只是我的代码”选项。
如果这有帮助,我尝试在这样的行上访问该属性(来自不同的项目)
message.From = new MailAddress(Config.AdminEmail);
编辑
将代码更改为此代码后,我意识到 c 仍然是 null。
get {
if (admin_email == null) {
XElement c = config_xml;
XElement e = c.Element("admin_email");
// ^ Exception is now thrown here
string v = e.Value;
admin_email = v;
}
return admin_email;
}
答:
1赞
Abraham Murciano Benzadon
7/24/2020
#1
感谢 David、asawyer 和 Lasse V. Karlsen 帮助我意识到我的错误。我把我的代码改成了这个,现在它可以工作了。
admin_email = new Email(ConfigXml.Element("admin_email").Value;
我对 和 使用了类似的技术,因此我只会在需要时将 XML 加载到字段中,并且我忘记使用属性(执行加载)而不是字段(在我使用该属性之前为 null)访问它。config_xml
ConfigXml
config_xml
ConfigXml
config_xml
我不知道为什么它使用断点,也许当我查看它分配给它的属性时?我不知道。
评论
config_xml
config_xml.Element("admin_email")
null
config_xml.Element("admin_email")
null
.Element(...)