【问题标题】:String to Enum fails if not written exactly even with ignorecase set to true?即使将ignorecase设置为true,如果没有准确写入,字符串到枚举也会失败?
【发布时间】:2011-09-03 14:09:43
【问题描述】:
if (user.Access == (UserType)Enum.Parse(typeof(UserType), str, true))

我有一个频道机器人,它接受以下命令:

.add username usertype

现在我必须检查用户名是否已经具有该写入权限,但是当用户类型未完全写入 Enum 时,它总是会失败。

HeadAdmin 例如写成 headadmin 会导致以下错误:

System.NullReferenceException: Object reference not set to an instance of an object.

此外,如果我键入一个不存在的枚举,它会告诉我未找到值 X。

如何转换用户类型,如果匹配则返回 true,如果不匹配或不存在则返回 false?

【问题讨论】:

  • Enum.Parse 不会给出 NullReferenceException... 我相信“忽略大小写”选项通常可以正常工作。请展示一个简短但完整的程序来演示该问题。
  • TryParse 帮助您解决第二个问题。不知道区分大小写的东西。你能发布显示问题的代码吗?
  • 向我们展示代码,否则我们无法为您提供帮助。
  • 你是说如果你输入HeadAdmin它工作正常,但如果你输入headadmin你得到一个NullReferenceException
  • @CodeInChaos 我无法访问此项目中的 .net 4,这似乎是 TryParse 存在于枚举中。

标签: c# enums type-conversion


【解决方案1】:

鉴于您的示例代码和所述错误,我的第一个假设是 user 对象是 null

【讨论】:

  • 是的,我已经解决了这个问题,但是找不到枚举怎么办?
  • @Guapo Enum.Parse 在这种情况下会抛出一个ArgumentException(除非它是空的str,然后会抛出一个ArgumentNullException)。
猜你喜欢
  • 2019-11-16
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多