【问题标题】:Operator '==' cannot be applied to operands of type string and Enum运算符 '==' 不能应用于字符串和枚举类型的操作数
【发布时间】:2016-06-10 03:12:22
【问题描述】:

我有以下代码,其中Model.VerticalType 包含字符串。我想将其与Enum 进行比较,但出现错误:

运算符“==”不能应用于“字符串”类型的操作数和

DGS.DGSAPI.UI.BusinessModels.Enums.VerticalType.Voice

@if (Model.VerticalType == DGS.DGSAPI.UI.BusinessModels.Enums.VerticalType.Voice)
{
   <img src="@phoneWSource" />
}

【问题讨论】:

  • 您的模型不能将枚举作为字段有什么原因?
  • @Bauss 代码由其他人编写,我无权更改它。所以我必须为它找到一个解决方案。

标签: c# enums


【解决方案1】:

在枚举值上调用.ToString()

@if (Model.VerticalType == DGS.DGSAPI.UI.BusinessModels.Enums.VerticalType.Voice.ToString())

这会将枚举转换为其名称,在本例中为 Voice

【讨论】:

    【解决方案2】:

    尝试Enum.Parse 将字符串转换为枚举值:

    Enum.Parse(typeof(DGS.DGSAPI.UI.BusinessModels.Enums.VerticalType), Model.VerticalType, true) == DGS.DGSAPI.UI.BusinessModels.Enums.VerticalType.Voice
    

    true 表示解析时忽略大小写

    【讨论】:

    • 我实际上比这更喜欢.ToString() 方法,因为如果字符串不是有效的枚举值,它只会进行字符串相等比较并返回 false 而不是抛出异常。
    • @caesay 我认为这非常取决于要求。有时,我需要字符串"EnumValue""enumValue""enumvalue" 等于真正的EnumValue。另外,有一种方法Enum.TryParse 可以防止异常......所以,这取决于。
    • 您可以轻松地进行不区分大小写的字符串比较,因此您的 "EnumValue""enumValue" 示例并不真正有效
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2016-06-30
    • 2015-04-19
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多