I. е. следующие работы...
Код: Выделить всё
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
Код: Выделить всё
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 ) # Error
Невозможно преобразовать значение «MyBool» в тип «System.Boolean». Логические параметры принимают только
логические значения и числа, такие как $True, $False, 1 или 0.
Обратите внимание, что в C# неявное преобразование в bool работает как положено:
Код: Выделить всё
public class MyBoolTest {
public static void Test() {
bool b = new MyBool( true ); // OK
}
}
(PSVersion: 7.2.2)
Подробнее здесь: https://stackoverflow.com/questions/716 ... powershell
Мобильная версия