Với chức năng cơ bản này:tham số rỗng là không Null trong chức năng
Function TestFunction {
Param ([int]$Par1, [string]$Par2, [string]$Par3)
If ($Par1 -ne $Null) { Write-Output "Par1 = $Par1" }
If ($Par2 -ne $Null -or $Par2 -ne '') { Write-Output "Par2 = $Par2" }
If ($Par3 -ne $Null) { Write-Output "Par3 = $Par3" }
}
TestFunction -Par1 1 -Par3 'par3'
... đầu ra là:
Par1 = 1
Par2 =
Par3 = par3
Mặc dù tôi đã không vượt qua bất cứ điều gì vào biến $Par2
, nó vẫn không phải là Null hoặc trống rỗng. Điều gì đã xảy ra, và làm thế nào tôi có thể viết lại câu lệnh sao cho câu lệnh If thứ hai đánh giá là False và khối script không được thực thi?
(tôi thêm -or $Par2 -ne ''
chỉ để kiểm tra, nó cư xử như nhau có và không có nó.)
Đó là nhanh. Nhưng những gì thực sự là IN '$ Par2'? Nếu tôi chuyển một giá trị vào nó, '$ Par2 -ne $ Null' sẽ là đúng. Nhưng nếu tôi không đưa vào nó '$ Par2 -ne $ Null' phải là sai và không nên được thực hiện, phải không? Chưa hết, ... – Mark
Xem chỉnh sửa của tôi. '$ Par2' sẽ luôn là một chuỗi bởi vì bạn đã gán nó vào một trong danh sách đối số của hàm. Ngoài ra, trong tương lai, bạn có thể lấy kiểu biến bất kỳ bằng cách sử dụng phương thức 'GetType':' $ Par2.GetType() '. Điều này sẽ hỗ trợ rất nhiều trong việc gỡ lỗi. – iCodez
Vì vậy, bởi vì tôi đúc nó trong khối tham số, nó sẽ luôn luôn tồn tại và không bao giờ được null? Ngay cả khi tôi đã thay đổi giá trị mặc định thành null ('[string] $ Par2 = $ Null')? Và một số nguyên sẽ luôn là 0? Vì vậy, nếu tôi không chuyển gì vào '$ par1', thì' If ($ Par1) 'sẽ là true vì nó chứa 0? Vì vậy, khi cố gắng viết kịch bản tốt hơn bằng cách truyền các loại biến, tôi thực sự đã làm cho bản thân khó khăn hơn. – Mark