【问题标题】:Very basic use of Enum.TryParse doesn't workEnum.TryParse 的非常基本的使用不起作用
【发布时间】:2013-07-01 08:57:57
【问题描述】:

我找到了一个非常基本的代码,如下所述,我无法让它在我的 c# windows Forms 解决方案中工作。我得到了错误:

  • 'System.Enum.TryParse(string, out string)' 的最佳重载方法匹配有一些无效参数

  • 参数 1:无法从 'System.Type' 转换为 'string'

    public enum PetType
    {
        None,
        Cat = 1,
        Dog = 2
    }
    
    string value = "Dog";
    PetType pet = (PetType)Enum.TryParse(typeof(PetType), value);
    
    if (pet == PetType.Dog)
    {
        ...
    }
    

我不明白问题出在哪里。错误都在Enum.TryParse 行。有什么想法吗?

谢谢。

【问题讨论】:

  • Enum.TryParse(typeof(PetType), out value);
  • TryParse 返回一个枚举,表示如果解析成功,您必须将 PetType 作为输出参数传递以获取结果
  • The best overloaded method match for 'System.Enum.TryParse(string, out string)' has some invalid arguments 说明了一切。您推送的是Typestring,而不是stringout string。另外,返回值是bool,而不是enum,但你现在已经知道了。
  • @FabioMarcolini TryParse return an enum 你的意思是返回一个 bool,对吧? ;)

标签: c#


【解决方案1】:

从文档中可以看出,Enum.TryParse<TEnum> 是一个返回布尔属性的通用方法。您使用不正确。它使用out 参数来存储结果:

string value = "Dog";
PetType pet;
if (Enum.TryParse<PetType>(value, out pet))
{
    if (pet == PetType.Dog)
    {
        ...
    }
}
else
{
    // Show an error message to the user telling him that the value string
    // couldn't be parsed back to the PetType enum
}

【讨论】:

  • 谢谢。看来我的示例网站来源不是一个好的来源。
  • @Bronzato 您可能正在使用Enum.ParseTryParseParse 有很大不同。
  • err.. out 废话又惹到我了
【解决方案2】:

首先要注意的是 TryParse 返回一个布尔值,而不是你的枚举的 Type

out 参数必须指向一个变量,该变量是enumType

【讨论】:

    【解决方案3】:

    我认为您建议使用 Enum.Parse:

     PetType pet = (PetType)Enum.Parse(typeof(PetType), value);
    

    TryParse 仅在解析成功时返回 true,否则返回 false。

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2016-09-01
      • 2021-02-26
      • 2014-04-13
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多