如何检查数组中的元素

本文关键字:数组 元素 检查 何检查 | 更新日期: 2023-09-27 18:10:58

在下面的代码中,

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"?

如何检查数组中的元素

在这种情况下,一个简单的null检查就足够了。这里有一些关于这个主题的文档和一个很好的溢出线程。

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

先检查是否为空:

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