1

鉴于我目前enum

Add-Type -TypeDefinition @"
   [System.Flags] 
   public enum FlagsEnum {
      None = 0,
      SummaryInfo = 1,
      ReportOptions = 2,
      ParameterFields = 4
   }
"@

有没有办法创建一个将所有位设置为 1 的条目?此语法会导致错误:

Add-Type -TypeDefinition @"
   [System.Flags] 
   public enum FlagsEnum {
      None = 0,
      SummaryInfo = 1,
      ReportOptions = 2,
      ParameterFields = 4,
      All = (SummaryInfo -bor ReportOptions -bor ParameterFields)
   }
"@

** 编辑 **

更改了声明:

Add-Type -TypeDefinition @"
   [System.Flags] 
   public enum FlagsEnum {
      None = 0,
      SummaryInfo = 1,
      ReportOptions = 2,
      ParameterFields = 4,
      All = (SummaryInfo | ReportOptions | ParameterFields)
   }
"@

编码:

$flags = [FlagsEnum]::All

if ( $flags -band [FlagsEnum]::SummaryInfo ) { write-host "add SummaryInfo" } 
if ( $flags -band [FlagsEnum]::ReportOptions ) { write-host "add ReportOptions" } 
if ( $flags -band [FlagsEnum]::ParameterFields ) { write-host "add ParameterFields" } 

结果:

Add-Type : Cannot add type. The type name 'FlagsEnum' already exists.
At C:\Documents and Settings\xxx\My Documents\WindowsPowerShell\Scripts\enums.ps1:3 char:9
+ Add-Type <<<<  -TypeDefinition @"
    + CategoryInfo          : InvalidOperation: (FlagsEnum:String) [Add-Type], Exception
    + FullyQualifiedErrorId : TYPE_ALREADY_EXISTS,Microsoft.PowerShell.Commands.AddTypeCommand
4

2 回答 2

4

尝试这个:

Add-Type -TypeDefinition @"
  [System.Flags] 
  public enum FlagsEnum {
    None = 0,
    SummaryInfo = 1,
    ReportOptions = 2,
    ParameterFields = 4,
    All = (SummaryInfo | ReportOptions | ParameterFields)
  }
"@

请记住,在此处的文档中,您实际上并不是在编写 PowerShell,而是在编写 C#。

根据原始问题的提问者的评论为后代编辑

显示的实际错误表明该类型已经存在。这是因为早期版本的代码已在同一个 PowerShell 会话中运行。PowerShell 的一个不幸限制是您不能添加类型、调整它然后重新添加它(这使得开发定义自己类型的脚本很痛苦)。

于 2013-05-02T16:52:44.677 回答
3

您正在定义一个 C# 枚举,因此请使用 C# 运算符,例如:

 All = SummaryInfo | ReportOptions | ParameterFields
于 2013-05-02T16:58:05.987 回答