繁体   English   中英

布尔变量作为Object []返回

[英]Boolean variable gets returned as an Object[]

我有一个函数返回一个布尔变量

function test ($param1, $param2)
{
  [boolean]$match=$false;

  <# function logic #>

  return $match
}

当我尝试在变量$ retByFunct = testing $ param1 $ param 2中捕获函数调用时

我将$ retByFunct作为对象数组。 如果我尝试强制$ retByFunct为布尔变量,即[boolean] $ retByFunct = testing $ param1 $ param 2,则会收到以下错误。

无法将值“ System.Object []”转换为System.Boolean类型

我刚刚返回$ match.GetType()。 控制台说它是一个布尔值,所以对于为什么在函数调用后将其转换为对象数组感到困惑。

我知道某些收集对象会发生这种情况,并且可以解决该问题,但是如何处理变量的大小写呢?

正如@mjolinor所说,您需要显示其余代码。 我怀疑它会在某个地方的成功输出流上生成输出。 PowerShell函数返回该流上的所有输出,而不仅仅是return关键字的参数。 文档中

在PowerShell中,即使没有包含Return关键字的语句,每个语句的结果也将作为输出返回。 诸如C或C#之类的语言仅return关键字指定的一个或多个值。

两者之间没有区别

function Foo {
  'foo'
}

要么

function Foo {
  'foo'
  return
}

要么

function Foo {
  return 'foo'
}

上面的每个函数在调用时都返回字符串foo

附加输出使返回值成为数组,例如:

function Foo {
  $v = 'bar'
  Write-Output 'foo'
  return $v
}

此函数返回数组'foo', 'bar'

您可以通过将其重定向到$null来抑制不想要的输出:

function Foo {
  $v = 'bar'
  Write-Output 'foo' | Out-Null
  Write-Output 'foo' >$null
  return $v
}

或通过将其捕获到变量中:

function Foo {
  $v = 'bar'
  $captured = Write-Output 'foo'
  return $v
}

返回某些信息##不是PowerShell返回的唯一内容。 如果愿意,这是PowerShell的陷阱之一。 成功输出流上的所有输出也将被返回。 这就是为什么您要从函数返回一系列对象的原因。

function test {
  "hello"
  return "world"
}

$mytest=test
$mytest 

尝试上面的代码...您将不仅获得“世界”,还获得“你好”,“世界”

$mytest.count
2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM