C# 奇怪的enum.TryParse行为
我在WPF窗口派生类中有以下属性定义: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; } } 该函数始终返
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
,但是它不能解析字符串侧边。购买
和侧边。出售
仔细检查侧边组合框的返回值。选择值作为字符串
…您是否检查了侧边组合框的值。选择值作为字符串
?