问题描述
我试图指定方法的第三个参数的值,同时仍然让方法中的第二个参数默认。
我能够将其拼凑起来使其工作,但我希望其他人有更好的解决方案
CREATE TABLE MyTable
([MyTimeField] nvarchar(5))
;
INSERT INTO MyTable
([MyTimeField])
VALUES
('00:15'),('00:30'),('01:45'),('23:15'),('23:59'),('24:00')
;
WITH IntMinutes AS
(
SELECT
CASE
WHEN RIGHT('0000' + MyTimeField,5) < '24:00' THEN DATEDIFF(MINUTE,'00:00:00',MyTimeField)
ELSE
DATEDIFF(MINUTE,'00:' + RIGHT(MyTimeField,2)) +
DATEDIFF(MINUTE,CAST((LEFT(MyTimeField,2) - 24) AS VARCHAR(2)) + ':00') +
DATEDIFF(MINUTE,'23:59') + 1
END AS Minutes
FROM MyTable
)
SELECT SUM(Minutes) AS TotalMinutes
FROM IntMinutes
解决方法
为了检查参数是否绑定到参数,您需要使用 $PSBoundParameters
:
Add-Member -MemberType ScriptMethod -InputObject $o -Name 'WrapText' -Value {
param($S,$Open='"',$Close='"')
if($PSBoundParameters.ContainsKey('Close')){
"$Open$S$Close"
}else{
"$Open$S$Open"
}
}
现在 if
条件只有在提供第三个参数时才为 $true
:
PS ~> $o.WrapText('abc')
"abc"
PS ~> $o.WrapText('abc',"'")
'abc'
PS ~> $o.WrapText('abc',"'",'$')
'abc$