以下はすべて PowerShell で完全に機能しますが、Visual Studio の C# でコンパイルすることさえできません。
D:\> $dow = [DayOfWeek]'Monday'
D:\> $dow.ToInt32($null)
1
D:\> $dow.value__
1
これはなぜですか?
ありがとう。
以下はすべて PowerShell で完全に機能しますが、Visual Studio の C# でコンパイルすることさえできません。
D:\> $dow = [DayOfWeek]'Monday'
D:\> $dow.ToInt32($null)
1
D:\> $dow.value__
1
これはなぜですか?
ありがとう。
PowerShell と C# はまったく別のシステムだからです。
C# は厳密に型指定されたコンパイル済み言語であり、PowerShell はスクリプト言語です。C# が VBA と異なるのと同じように、PowerShell とも異なり、VBA とも異なります。
そのため、それぞれに独自の機能があり、異なる環境で同じものもあれば、ほとんどの機能がそうでないものもあります。
ほとんどの場合、C# は静的に型付けされる言語ですが、PowerShell はほとんどが動的に型付けされます。つまり、基本的には、C# ではコンパイル時に型チェックが行われ (動的コード ブロックを除く)、PowerShell では実行時に型チェックが行われることを意味します。
C# には、ある型の値を別の型の値として扱うことを防ぐタイプ セーフもあります。したがって、コンパイルエラーが発生します。
私の推測では、これはすべての列挙型が実装されているためIConvertible
です。C# ではToInt32
、インターフェイスが明示的に実装されているため、メソッドは直接表示されませんが、Powershell にはおそらく異なるルールがあります。