Неявное преобразование в bool структуры, определенной в C#, не выполняется в PowerShellC#

Место общения программистов C#
Ответить
Anonymous
 Неявное преобразование в bool структуры, определенной в C#, не выполняется в PowerShell

Сообщение Anonymous »

Почему неявное преобразование в [byte] работает, а при замене byte на bool оно больше не работает?
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
}
}
Похоже, это проблема только PowerShell.
(PSVersion: 7.2.2)

Подробнее здесь: https://stackoverflow.com/questions/716 ... powershell
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»