在下面的代码中,行
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”?
答案 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
}
这将另外确保Value
是PSObject
的数组。
答案 2 :(得分:0)
先检查它是否为空:
if ((PSObject[])result.Members["description"] != null)
{
*** Do whatever ***
}