如何检查数组中的元素

How to check an array for an element

在下面的代码中,行

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

导致异常。 "Object reference not set to an instance of an object."通过调试器查看,那是因为["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);
                }
            }

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

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

因为对 Members[[=​​22=]] 的引用导致异常。我是否必须遍历数组并检查每个名称 属性 以查看它是否是 "Description"?

先检查是否为空:

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

在这种情况下,一个简单的空检查就足够了。这里有一些关于这个主题的 docs and a good overflow thread

var memberDescription = result.Members["description"] as PSObject[];

if (memberDescription != null && memberDescription.Value != null){
    foreach (PSObject d in memberDescription.Value )
    {
        paramDesc.Append(d.Members["Text"].Value);
    }
}

这是您需要做的检查。

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 的数组。