我有两段代码:
# code 1:
[type]$t1 = [switch]
# all is ok, code works as expected
#code 2:
function test ([type]$t2) { }
test -t2 [switch]
# here we get error. can't convert from string to system.type
我知道,我可以写:test -t2 "System.Management.Automation.SwitchParameter"
,但它很难看!
为什么我可以将[switch]设置为[type]变量,但不能将其传递给函数??
答案 0 :(得分:3)
你可以这样做:
test -t2 "switch"
或者您可以使用code1中的示例并传入$t1
本身:
function test ([type]$t2) { }
[type]$t1 = [switch]
test -t2 $t1
答案 1 :(得分:3)
PowerShell允许您使用强制转换创建类型:
PS> [type]"switch"
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SwitchParameter System.ValueType
您实际做的是传递括号中的类型名称:
PS> [type]"[switch]"
Cannot convert the "[switch]" value of type "System.String" to type "System.Type".
所以你只需要传递类型的名称:
test -t2 switch
或
test -t2 ([switch].fullname)
答案 2 :(得分:2)
将参数作为表达式包装到测试函数中,它将返回类型:
function test ([type]$t2) { }
test -t2 ([switch])