Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 奇怪的enum.TryParse行为_C#_Wpf_C# 4.0 - Fatal编程技术网

C# 奇怪的enum.TryParse行为

C# 奇怪的enum.TryParse行为,c#,wpf,c#-4.0,C#,Wpf,C# 4.0,我在WPF窗口派生类中有以下属性定义: internal Side? Side { get { if (SideComboBox.SelectedIndex==-1) return null; Side side; if (!Enum.TryParse(SideComboBox.SelectedValue as string, out side)) return null; return side; } } 该函数始终返

我在WPF窗口派生类中有以下属性定义:

internal Side? Side
{
  get
  {
    if (SideComboBox.SelectedIndex==-1)
      return null;

    Side side;

    if (!Enum.TryParse(SideComboBox.SelectedValue as string, out side))
      return null;

    return side;
  }
}
该函数始终返回null。所以我想,我会走进去看看发生了什么。事实证明,TryParse方法总是返回false(即,导致第二个if语句的主体执行,从而返回null)。我查看字符串的值,看它是否确实是枚举的有效值,并且确实是。为什么即使将有效字符串发送到TryParse,解析也总是失败

以下是枚举定义:

  enum Side
  {
    Buy,
    Sell
  }

更新:好了,伙计们,这里有一个明确的LOL时刻。事实证明SelectedValue实际上返回的是枚举本身,而不是字符串,但当我在调试器中查看它时,它总是隐式地将其转换为字符串。最后,在阅读了您的评论之后,我决定实际上双击“监视”窗口中的值,但却惊恐地发现该值是MyApp.Side.Sell-一个枚举而不是字符串。因此,记下另一个,检查
的结果是否为非空

以下LINQPad程序对我很有用:

void Main()
{
    Side side;
    Enum.TryParse("Buy", out side).Dump();
    side.Dump();
}

public enum Side{Buy, Sell}

我猜您的
SelectedValue
输入实际上不是枚举的有效值,即使您认为它是有效值。

根据提供的代码,我认为您不应该对此有问题,如果不是的话

  • 实际检查
    侧组合框的值。SelectedValue为字符串

  • 使用重载并指定参数以忽略大小写,如下所示

    Enum.TryParse(SideComboBox.SelectedValue为字符串,true,out-side)

这样,如果
组合中的字符串大小写不同,它将被“捕获”


希望这有帮助

如果您再次检查该值是否正确,您可能犯了与我犯过多次相同的错误;Enum.TryParse可以解析字符串
Buy
Sell
,但是它不能解析字符串
侧边。购买
侧边。出售

仔细检查
侧边组合框的返回值。选择值作为字符串
…您是否检查了
侧边组合框的值。选择值作为字符串