Bagikan melalui


PossibleIncorrectComparisonWithNull

Tingkat Keparahan : Peringatan

Deskripsi

Untuk memastikan bahwa PowerShell melakukan perbandingan dengan benar, elemen $null harus berada di sisi kiri operator.

Ada beberapa alasan mengapa hal ini terjadi:

  • $null adalah nilai skalar. Ketika nilai di sisi kiri operator adalah skalar, operator perbandingan mengembalikan nilai Boolean. Saat nilai adalah koleksi, operator perbandingan mengembalikan nilai yang cocok atau array kosong jika tidak ada kecocokan dalam koleksi.
  • PowerShell melakukan pengecoran jenis pada operand sebelah kanan, menghasilkan perbandingan yang salah saat $null ditransmisikan ke jenis skalar lainnya.

Satu-satunya cara untuk memeriksa apakah nilai $null adalah dengan menempatkan $null di sisi kiri operator sehingga perbandingan skalar dilakukan.

Bagaimana

Pindahkan $null ke sisi kiri perbandingan.

Contoh

Salah

function Test-CompareWithNull
{
    if ($DebugPreference -eq $null)
    {
    }
}

Benar

function Test-CompareWithNull
{
    if ($null -eq $DebugPreference)
    {
    }
}

Cobalah Sendiri

# This example returns 'false' because the comparison does not return any objects from the array
if (@() -eq $null) { 'true' } else { 'false' }
# This example returns 'true' because the array is empty
if ($null -ne @()) { 'true' } else { 'false' }

Ini adalah cara kerja operator perbandingan berdasarkan desain. Tetapi, seperti yang ditunjukkan, ini dapat menyebabkan perilaku non-intuitif, terutama ketika niatnya adalah tes sederhana untuk null.

Contoh berikut menunjukkan perilaku operator perbandingan yang dirancang saat sisi kiri adalah koleksi. Setiap elemen dalam koleksi dibandingkan dengan nilai sisi kanan. Jika true, elemen koleksi tersebut dikembalikan.

PS> 1,2,3,1,2 -eq $null
PS> 1,2,3,1,2 -eq 1
1
1
PS> (1,2,3,1,2 -eq $null).count
0
PS> (1,2,$null,3,$null,1,2 -eq $null).count
2