【问题标题】:How to parse a null to a null in Enum.Parse?如何在 Enum.Parse 中将 null 解析为 null?
【发布时间】:2014-06-16 21:57:51
【问题描述】:

这是我的代码:

return (Skills) Enum.Parse(typeof(Skills),  CSData[(int)cs].Requirement);

但由于有时没有要求(即值为空),我希望在这种情况下也解析空值,我该怎么做?

【问题讨论】:

标签: c#


【解决方案1】:

问题是,枚举是不可为空的值类型。因此,从逻辑上讲,您不能像您所说的那样“将 null 解析为 null”。

您可以做的是将方法的返回类型更改为可为空的Skills

public Skills? MyMethod(string str)
{
    return (str == null)
           ? null as Skills?
           : (Skills) Enum.Parse(typeof(Skills), str);
}

【讨论】:

    【解决方案2】:

    改用 Enum.TryParse - 它返回一个布尔值,告诉您解析是否有效,而不是抛出异常。然后你就可以采取相应的行动了。

    【讨论】:

      【解决方案3】:

      作为dcastros 答案的替代方案,您可以引入额外的枚举值,例如Skills.Unknown 以避免在您的代码中进一步检查 null。

      return String.IsNullOrEmpty(str) ? Skills.Unknown : (Skills)Enum.Parse(typeof(Skills), str);
      

      【讨论】:

      • 但那时我不能只使用 Unknown 作为字符串传递吗?
      • @user3161621 当您控制如何将数据解析(或写入)到您的数据时,我们将其称为“存储”:是的,您可以将“未知”作为参数传递。但是,如果您的数据来自某种“第三方”,您显然必须检查不规则值(这有点像您最初的问题)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2021-08-18
      • 2020-02-15
      • 2019-07-31
      相关资源
      最近更新 更多