检查c#方法中的list是否为null

时间:2014-02-24 07:37:20

标签: c# xml

你好,我有这个方法

    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?

3 个答案:

答案 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
}