【发布时间】:2014-06-16 21:57:51
【问题描述】:
这是我的代码:
return (Skills) Enum.Parse(typeof(Skills), CSData[(int)cs].Requirement);
但由于有时没有要求(即值为空),我希望在这种情况下也解析空值,我该怎么做?
【问题讨论】:
标签: c#
这是我的代码:
return (Skills) Enum.Parse(typeof(Skills), CSData[(int)cs].Requirement);
但由于有时没有要求(即值为空),我希望在这种情况下也解析空值,我该怎么做?
【问题讨论】:
标签: c#
问题是,枚举是不可为空的值类型。因此,从逻辑上讲,您不能像您所说的那样“将 null 解析为 null”。
您可以做的是将方法的返回类型更改为可为空的Skills。
public Skills? MyMethod(string str)
{
return (str == null)
? null as Skills?
: (Skills) Enum.Parse(typeof(Skills), str);
}
【讨论】:
改用 Enum.TryParse - 它返回一个布尔值,告诉您解析是否有效,而不是抛出异常。然后你就可以采取相应的行动了。
【讨论】:
作为dcastros 答案的替代方案,您可以引入额外的枚举值,例如Skills.Unknown 以避免在您的代码中进一步检查 null。
return String.IsNullOrEmpty(str) ? Skills.Unknown : (Skills)Enum.Parse(typeof(Skills), str);
【讨论】: