Default for null values

Work on a Powershell script I had several places where I wanted A, if it was not null, otherwise B. In fact, a statement in C #. I have finished writing the function shown below, but I cannot help but think that there is a built-in way to do this.

Is there a better, built-in way?

function Get-ValueOrDefault() { foreach ($value in $args) { if ($value -ne $null) { return $value } } } 

I think this works better:

 function Get-ValueOrDefault() { $args | select -first 1 } 
+6
powershell
source share
1 answer

This is what we provide in PowerShell Community Extensions :

 <# .SYNOPSIS Similar to the C# ?? operator eg name = value ?? String.Empty .DESCRIPTION Similar to the C# ?? operator eg name = value ?? String.Empty; where value would be a Nullable&lt;T&gt; in C#. Even though PowerShell doesn't support nullables yet we can approximate this behavior. In the example below, $LogDir will be assigned the value of $env:LogDir if it exists and it not null, otherwise it get assigned the result of the second script block (C:\Windows\System32\LogFiles). This behavior is also analogous to Korn shell assignments of this form: LogDir = ${$LogDir:-$WinDir/System32/LogFiles} .PARAMETER PrimaryExpr The condition that determines whether the TrueBlock scriptblock is used or the FalseBlock is used. .PARAMETER AlternateExpr This block gets evaluated and its contents are returned from the function if the Conditon scriptblock evaluates to $true. .EXAMPLE C:\PS> $LogDir = ?? {$env:LogDir} {"$env:windir\System32\LogFiles"} $LogDir is set to the value of $env:LogDir unless it doesn't exist, in which case it will then default to "$env:windir\System32\LogFiles". #> filter Invoke-NullCoalescing { param([scriptblock]$PrimaryExpr = $(throw "Parameter '-primaryExpr' (position 1) required"), [scriptblock]$AlternateExpr = $(throw "Parameter '-alternateExpr' (position 2) required")) if ($primaryExpr -ne $null) { $result = &$primaryExpr if ($result -ne $null -and "$result" -ne '') { $result } else { &$alternateExpr } } else { &$alternateExpr } } New-Alias ?? Invoke-NullCoalescing PS> ?? {$xyzzy} {"empty"} empty PS> ?? {$psversiontable} {"empty"} Name Value ---- ----- CLRVersion 2.0.50727.4927 BuildVersion 6.1.7600.16385 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1 
+5
source share

All Articles