【问题标题】:PowerShell: Dot in Enum Name Causing Add-Type to FailPowerShell:枚举名称中的点导致添加类型失败
【发布时间】:2017-02-14 08:46:56
【问题描述】:

我在下面的 PowerShell 中创建了枚举。但是,如果枚举名称中有一个点(例如,“Name.A”),那么 Add-Type 将返回错误。我该怎么做?我不想从“Name.A”中删除点。

$TypeEnum = "
    namespace Types {
        public enum Id { 
            Name.A = 1,
            NameB = 2,
            NameC = 3
        }   
    }"

Add-Type -TypeDefinition $TypeEnum -Language CSharpVersion3

([Types.Id]::'Name.A').value__

这是我得到的错误:

添加类型:c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(4) : } 预期 c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(3) :
公共枚举 ID { c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(4) : >>> 名称.A = 1, c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(5) :
NameB = 2,行:10 字符:1 + 添加类型 -TypeDefinition $TypeEnum -Language CSharpVersion3 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo : InvalidData: (c:\Users\User1...513: } expected:CompilerError) [Add-Type], 异常 + FullyQualifiedErrorId : SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand
添加类型:c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(8):类型 或命名空间定义,或预期的文件结尾 c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(7) : }
c:\Users\User1\AppData\Local\Temp\ab0z5i1y.0.cs(8) : >>> } 在 行:10 字符:1 + 添加类型 -TypeDefinition $TypeEnum -Language CSharpVersion3 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo : InvalidData: (c:\Users\User1...f-file expected:CompilerError) [Add-Type], 异常 + FullyQualifiedErrorId : SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand
Add-Type : 无法添加类型。有编译错误。在线:10 字符:1 + 添加类型 -TypeDefinition $TypeEnum -Language CSharpVersion3 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Add-Type], InvalidOperationException + FullyQualifiedErrorId:COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand 无法 查找类型 [Types.Id]:确保包含此的程序集 类型已加载。在行:12 字符:1 + ([Types.Id]::'Name.A').value__ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Types.Id:TypeName) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound

【问题讨论】:

  • 那不是有效的 C#。
  • 您能否详细说明需要更改的内容等?
  • C# 不允许点作为标识符的一部分。
  • Name.A 更改为 NameA。 C# 中的标识符中不允许使用句点。为什么不想删除点?
  • 因为 Id 被提取到我这里,但我只是想到了在获取枚举值之前从名称中删除点的方法。

标签: c# powershell enums add-type


【解决方案1】:

这是 .Net 以及扩展 PowerShell 和 C# 的限制。枚举成员名称中不能有标点符号。

因此,简短的回答是,如果不做一些 hacky,你就无法完成这项工作(你必须将 name.A 更改为 name[CharacterCode]A 或添加描述,或者其他一些你真的不应该做的奇怪的事情'不会)

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2020-08-29
    • 1970-01-01
    • 2016-11-28
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    相关资源
    最近更新 更多