如何检查数组中的元素
本文关键字:数组 元素 检查 何检查 | 更新日期: 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
}
这将额外确保Value
是PSObject
的数组。
先检查是否为空:
if ((PSObject[])result.Members["description"] != null)
{
*** Do whatever ***
}