以下所有内容都可以在 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,而 PowerShell 又不同于 VBA。
所以每个都有独特的功能,有些在不同的环境中是相同的,必须大多数功能都没有。
我的猜测是这是因为所有枚举都实现了IConvertible
. 在 C# 中,该ToInt32
方法不是直接可见的,因为接口是显式实现的,但 Powershell 可能有不同的规则。
在大多数情况下,C# 是一种静态类型的语言,而 PowerShell 主要是动态类型的。基本上,这意味着类型检查在 C# 中的编译时完成(不包括动态代码块),而类型检查在 PowerShell 中在运行时完成。
C# 还具有类型安全性,可防止您将一种类型的值视为另一种类型的值。因此你会得到一个编译错误。