你好,我有这个方法
public void insertXmlNode(string XmlParentNodeName, List<string> XmlNodeName, List<string> XmlNodeValue, List<string> XmlAttributeName, List<string> XmlAttributeValue)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(_connection);
XmlNode xparent = xdoc.SelectSingleNode("//" + XmlParentNodeName);
if (xparent == null)
{
xparent = xdoc.CreateNode(XmlNodeType.Element, XmlParentNodeName, null);
xdoc.DocumentElement.AppendChild(xparent);
}
for (int i = 0; i <= XmlNodeName.Count; i++)
{
XmlNode xnode = xdoc.CreateNode(XmlNodeType.Element, XmlNodeName[i], null);
xnode.InnerText = XmlNodeValue[i];
if (!string.IsNullOrEmpty(XmlAttributeName.ToString()))
{
XmlAttribute xattribute = xdoc.CreateAttribute(XmlAttributeName[i]);
xattribute.Value = XmlAttributeValue[i];
xnode.Attributes.Append(xattribute);
}
xparent.AppendChild(xnode);
}
xdoc.Save(_connection);
}
我称之为:
_db.insertXmlNode("Orders", _orderName, _orderValue, null, null);
“_ db是一个类instanc,_orderName&amp; _orderValue有列表字符串”
我想如果XmlAttributeName不为null将属性添加到xml节点但是我 得到这个错误
值不能为空
我如何检查XmlAttributeName是否为null?
答案 0 :(得分:0)
正如你在评论中所说的那样,而不是按照这种方式进行检查:
if (XmlAttributeName != null ||
XmlAttributeName.All(x => string.IsNullOrWhiteSpace(x)))
{
.......
}
尝试这样做:
if (XmlAttributeName != null &&
XmlAttributeName.All(x => !string.IsNullOrWhiteSpace(x)))
{
.......
}
只有满足第一个条件时,才会检查&&
运算符第二个条件。只有当if
不为空并且列表中的所有属性都不为空或空字符串时,代码执行才会进入XmlAttribute
块。
答案 1 :(得分:0)
private bool HasInvalidValues(IEnumerable<string> enumerable)
{
return enumerable == null || enumerable.Any(string.IsNullOrWhiteSpace);
}
答案 2 :(得分:0)
检查无效的正确方法是if(XmlAttributeName != null)
。对于参考类型,这种检查无处不在;在检查无效时,偶数Nullable<T>
会覆盖等于运算符,以便更方便地表达nullable.HasValue
。
如果您执行if(!XmlAttributeName.Equals(null))
,则会NullReferenceException
data == null
。这是一种滑稽的,因为首先避免这种例外是目标。
if (XmlAttributeName != null &&
XmlAttributeName.All(x => !string.IsNullOrWhiteSpace(x)))
{
// do here
}