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,而 PowerShell 又不同于 VBA。

所以每个都有独特的功能,有些在不同的环境中是相同的,必须大多数功能都没有。

于 2012-11-19T10:24:27.817 回答
2

我的猜测是这是因为所有枚举都实现了IConvertible. 在 C# 中,该ToInt32方法不是直接可见的,因为接口是显式实现的,但 Powershell 可能有不同的规则。

于 2012-11-19T10:25:13.493 回答
2

在大多数情况下,C# 是一种静态类型的语言,而 PowerShell 主要是动态类型的。基本上,这意味着类型检查在 C# 中的编译时完成(不包括动态代码块),而类型检查在 PowerShell 中在运行时完成。

C# 还具有类型安全性,可防止您将一种类型的值视为另一种类型的值。因此你会得到一个编译错误。

于 2012-11-19T11:37:33.263 回答