¿Por qué funciona una conversión implícita a [byte] , pero al reemplazar byte por bool ya no funciona?
Es decir. los siguientes trabajos...
Add-Type -TypeDefinition @' public readonly struct MyByte { private readonly byte value; public MyByte( byte b ) => this.value = b; public static implicit operator byte( MyByte b ) => b.value; public static explicit operator MyByte( byte b ) => new MyByte( b ); public override string ToString() => $"{value}"; } '@ [byte] $d = [MyByte]::new( 1 ) # OK... mientras que este código muy similar no:
Add-Type -TypeDefinition @' public readonly struct MyBool { private readonly bool value; public MyBool( bool b ) => this.value = b; public static implicit operator bool( MyBool b ) => b.value; public static explicit operator MyBool( bool b ) => new MyBool( b ); public override string ToString() => $"{value}"; } '@ [bool] $b = [MyBool]::new( $true ) # ErrorEsto produce el siguiente error:
No se puede convertir el valor "MyBool" al tipo "System.Boolean". Los parámetros booleanos solo aceptan valores y números booleanos, como $True, $False, 1 o 0.
Tenga en cuenta que en C# la conversión implícita a bool funciona como se esperaba:
public class MyBoolTest { public static void Test() { bool b = new MyBool( true ); // OK } }Entonces, esto parece ser solo un problema de PowerShell.
(Versión PS: 7.2.2)