当前位置: 首页 > 知识库问答 >
问题:

PowerShell空数组初始化在条件变量赋值中失败

柯正谊
2023-03-14
if ($condition)
{ 
   $accessList = @() 
}
else
{
    $accessList = $accessControl.AllowedItems
}
$accessList = if ($condition) { @() } else { $accessControl.AllowedItems }

单行程序无法初始化空数组。得到的$accesslist没有任何数组属性/方法,$null-eq$accesslist返回true。此版本也不起作用:

$accessList = $(if ($condition) { @() } else { $accessControl.AllowedItems })

奇怪的是,如果我尝试初始化一个非空数组,那么单行程序就会起作用。它可能与变量评估和管道的工作方式有关,但在搜索了一段时间后,我没有找到关于这个particluar案例的详细解释。请帮助理解其背后的机制。

共有1个答案

南宫俊逸
2023-03-14

您需要在(隐式使用的)管道中防止空数组的隐式枚举,最简单的解决方案是将其包装在一个辅助的临时数组中,您可以使用一元形式构造该数组,数组构造函数运算符:

$accessList = if ($condition) { , @() } else { $accessControl.AllowedItems }

PowerShell7+通过使用?:三元条件运算符(用作表达式)提供了一种绕过该问题的方法(参见下面的解释):

$accessList = $condition ? @() : $accessControl.AllowedItems 

背景资料:

在:

$accessList = @()

@()是一个表达式,因此按原样赋值。

在:

$accessList = if ($condition) { @() }
 类似资料:
  • 问题内容: 这行代码给出以下警告: 警告:变量sh只能在此位置为null。 并且,此代码给出以下警告: 警告:局部变量sh可能尚未初始化。 问题答案: 这是因为您需要初始化数组。试试这个: 如果不初始化,则会收到这些警告,如果运行它也会得到警告。

  • 我有一个静态矩阵结果和静态矩阵添加方法以及一个静态矩阵显示(用于打印结果),我在主函数中编写了一个测试示例。 我的目标是:我想用这两种静态方法乘和加两个矩阵。 我得到这些错误"变量C和d可能没有被初始化"。有人能告诉我,问题是什么吗?

  • 问题内容: 我得到错误: TestCounter.java:115:变量计数器可能尚未初始化counters [i] = new Counter(i); 而且我不知道如何解决它。我知道我的课程“” 有效。下面是我的代码,如果您可以看一下,我将非常高兴。此代码包装在类的main方法中。 问题答案: 您尚未创建数组,只是声明了变量。 您需要这样做: 或类似的东西

  • 条款12: 尽量使用初始化而不要在构造函数里赋值 看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。 template<class t> class namedptr { public: namedptr(const string& initname, t *initptr); ... private: string name; t *ptr; }; (因为有指针成员的对象在

  • 问题内容: 如何使用类型初始化变量? 因为我有错误 问题答案: 常量声明不能包含函数调用(某些例外,请参见下文),它们必须在编译时进行评估,而函数调用是在运行时进行的。 引用规格:常量: 常数值由符文,整数,浮点数,虚数或字符串文字表示,标识符表示常数,常数表达式,结果为常数的转换或某些内置结果的值函数,例如应用于任何值,或应用于某些表达式,以及应用于常量,以及应用于数字常量的复数。 并引用Spe

  • 我在eclipse中配置了spring boot项目,在尝试运行它时遇到了下面的错误。请查看解决方案错误消息: 服务器是tomcat 9。我在网上检查了许多解决方案,但似乎没有解决这个问题。