如何检查元素的数组

时间:2015-09-02 19:40:42

标签: c# arrays powershell null

在下面的代码中,行

foreach (PSObject d in (PSObject[])result.Members["description"].Value)

导致异常。 “你调用的对象是空的。”查看调试器,这是因为[“description”]中没有元素。在尝试获取元素之前,如何检查元素是否存在?

foreach (PSObject result in psInstance.Invoke())
            {
                if (result != null)
                {
                    string pName = result.Members["name"].Value.ToString();
                    string pType = result.Members["parameterValue"].Value.ToString();

                    StringBuilder paramDesc = new StringBuilder();
                    foreach (PSObject d in (PSObject[])result.Members["description"].Value)
                    {
                        paramDesc.Append(d.Members["Text"].Value);
                    }

                    PsAdtParameter param = new PsAdtParameter();
                    param.Description = paramDesc.ToString();
                    param.Name = pName;
                    param.Type = pType;
                    command.Parameters.Add(param);
                }
            }

我知道如何检查null。但尝试这个不起作用:

foreach (PSObject d in (PSObject[])result.Members["description"].Value)
{
    if(d != null)
    {
        //Do something

因为对Members [“description”]的引用导致异常。我是否必须遍历数组并检查每个Name属性以查看它是否为“Description”?

3 个答案:

答案 0 :(得分:1)

在这种情况下,简单的空检查就足够了。以下是关于此主题的一些docs和一个好的overflow thread

s.nextFloat();

答案 1 :(得分:1)

这是您需要做的检查。

if(result.Members["description"] != null)
{
    var psobjects = result.Members["description"].Value as PSObject[];
    if(psobjects != null)
    {
        foreach (PSObject d in psobjects)
        {
            // whatever you want to do with each PSObject
        }
    }
    else
    {
        // Either Value was null or it wasn't a PSObject array.
    }
}
else
{
    // whatever you want to do when it's null
}

这将另外确保ValuePSObject的数组。

答案 2 :(得分:0)

先检查它是否为空:

if ((PSObject[])result.Members["description"] != null)
{
     *** Do whatever ***
}