2

以下はすべて PowerShell で完全に機能しますが、Visual Studio の C# でコンパイルすることさえできません。

D:\> $dow = [DayOfWeek]'Monday'
D:\> $dow.ToInt32($null)
1
D:\> $dow.value__
1

これはなぜですか?

ありがとう。

4

3 に答える 3

3

PowerShell と C# はまったく別のシステムだからです。

C# は厳密に型指定されたコンパイル済み言語であり、PowerShell はスクリプト言語です。C# が VBA と異なるのと同じように、PowerShell とも異なり、VBA とも異なります。

そのため、それぞれに独自の機能があり、異なる環境で同じものもあれば、ほとんどの機能がそうでないものもあります。

于 2012-11-19T10:24:27.817 に答える
2

ほとんどの場合、C# は静的に型付けされる言語ですが、PowerShell はほとんどが動的に型付けされます。つまり、基本的には、C# ではコンパイル時に型チェックが行われ (動的コード ブロックを除く)、PowerShell では実行時に型チェックが行われることを意味します。

C# には、ある型の値を別の型の値として扱うことを防ぐタイプ セーフもあります。したがって、コンパイルエラーが発生します。

于 2012-11-19T11:37:33.263 に答える
2

私の推測では、これはすべての列挙型が実装されているためIConvertibleです。C# ではToInt32、インターフェイスが明示的に実装されているため、メソッドは直接表示されませんが、Powershell にはおそらく異なるルールがあります。

于 2012-11-19T10:25:13.493 に答える