Winforms 使用Linq保存XML文件时出现NullReferenceException
我一直在这一行Winforms 使用Linq保存XML文件时出现NullReferenceException,winforms,linq,visual-studio-2010,c#-4.0,linq-to-xml,Winforms,Linq,Visual Studio 2010,C# 4.0,Linq To Xml,我一直在这一行UserRoot.Element(“User\u ID”).Value=User.User\u ID.ToString()处得到一个NullReferenceException 我到底做错了什么 下面是该方法的大部分代码 if (File.Exists(Path2UserDB + User.User_ID.ToString() + ".db") == false) { File.Create(Path2
UserRoot.Element(“User\u ID”).Value=User.User\u ID.ToString()处得到一个NullReferenceException代码>
我到底做错了什么
下面是该方法的大部分代码
if (File.Exists(Path2UserDB + User.User_ID.ToString() + ".db") == false)
{
File.Create(Path2UserDB + User.User_ID.ToString() + ".db");
}
XElement UserRoot = new XElement("User");
UserRoot.Element("User_ID").Value = User.User_ID.ToString();
UserRoot.Element("Full_Name").Value = User.Full_Name;
UserRoot.Element("Gender").Value = User.Gender;
UserRoot.Element("BirthDate").Value = User.BirthDate.ToString();
UserRoot.Element("PersonType").Value = User.PersonType.ToString();
UserRoot.Element("Username").Value = User.Username;
UserRoot.Element("Password").Value = User.Password;
UserRoot.Element("Email_adddress").Value = User.Email_Address;
XDocument UserDoc = new XDocument();
UserDoc.Save(Path2UserDB + User.User_ID.ToString() + ".db");
谢谢
我知道以纯文本保存用户名和密码是非常不安全的,但这只能由一个进程访问,我最终将实现强安全性在对其运行方法之前,您要检查该值是否为null或空
if(!String.IsnullorEmpty(User.User_ID))
UserRoot.Element("User_ID").Value = User.User_ID.ToString();
在对该值运行方法之前,需要检查该值是否为null或空
if(!String.IsnullorEmpty(User.User_ID))
UserRoot.Element("User_ID").Value = User.User_ID.ToString();
元素(“User\u ID”)
方法返回名为
的现有元素(如果有)
由于XML元素为空,因此它返回null
您应该像这样创建XML:
var userDoc = new XDocument(
new XElement("User",
new XElement("User_ID", User.User_ID),
new XElement("Full_Name", User.Full_Name),
new XElement("Gender", User.Gender),
...
)
);
或者,您可以调用将节点添加到现有元素。元素(“用户ID”)
方法返回名为
的现有元素(如果有)
由于XML元素为空,因此它返回null
您应该像这样创建XML:
var userDoc = new XDocument(
new XElement("User",
new XElement("User_ID", User.User_ID),
new XElement("Full_Name", User.Full_Name),
new XElement("Gender", User.Gender),
...
)
);
或者,您可以调用来将节点添加到现有元素。您会遇到此错误,因为在UserRoot下没有名为User\u ID的XML元素来设置其值。如果您将其注释掉,您将在下一行中得到相同的错误,依此类推,因为您没有添加具有这些名称的元素。要创建所需的树,请尝试以下操作:
XElement UserRoot =
new XElement("User",
new XElement("User_ID", User.User_ID.ToString()),
new XElement("Full_Name", User.Full_Name),
new XElement("Gender", User.Gender),
new XElement("BirthDate", User.BirthDate.ToString()),
new XElement("PersonType", User.PersonType.ToString()),
new XElement("Username", User.Username),
new XElement("Password", User.Password),
new XElement("Email_adddress", User.Email_Address)
);
上的以下MSDN链接将有所帮助。您将收到此错误,因为UserRoot下没有名为User\u ID的XML元素来设置其值。如果您将其注释掉,您将在下一行中得到相同的错误,依此类推,因为您没有添加具有这些名称的元素。要创建所需的树,请尝试以下操作:
XElement UserRoot =
new XElement("User",
new XElement("User_ID", User.User_ID.ToString()),
new XElement("Full_Name", User.Full_Name),
new XElement("Gender", User.Gender),
new XElement("BirthDate", User.BirthDate.ToString()),
new XElement("PersonType", User.PersonType.ToString()),
new XElement("Username", User.Username),
new XElement("Password", User.Password),
new XElement("Email_adddress", User.Email_Address)
);
下面的MSDN链接会有所帮助。我认为问题在于
UserRoot.Element(“User\u ID”)
是null
,而不是User.User\u ID
Gotcha,那么他应该检查一下,我想问题是UserRoot.Element(“User\u ID”)
是null
,而不是User.User\u ID
Gotcha,他应该检查你和上面的人是否都对,如果我could@Indebi没问题;当我发布我的解决方案时,我注意到Slaks已经更新了他的答案以包含正确的代码,所以他应该得到复选标记。我很高兴这一切都为你解决了:)你和上面的人都是对的,如果我could@Indebi没问题;当我发布我的解决方案时,我注意到Slaks已经更新了他的答案以包含正确的代码,所以他应该得到复选标记。不过,我很高兴这一切都为你解决了:)