我在WPF Window派生类中有以下属性定义:
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 - 枚举而不是字符串。所以,用另一个来检查as
的结果是非空的!
答案 0 :(得分:1)
以下LINQPad程序适用于我:
void Main()
{
Side side;
Enum.TryParse("Buy", out side).Dump();
side.Dump();
}
public enum Side{Buy, Sell}
我猜你的SelectedValue
输入实际上 枚举的有效值,即使你认为它是。
答案 1 :(得分:0)
从提供的代码看来,我不应该有这个问题,如果不是
实际检查SideComboBox.SelectedValue as string
代码
使用Enum.TryParse重载参数指定忽略大小写,如此
Enum.TryParse(SideComboBox.SelectedValue as string, true, out side)
通过这种方式,如果combo
中的字符串具有不同的大小写,那么它将被“捕获”。
希望这会有所帮助。
答案 2 :(得分:0)
如果你仔细检查过这个值是否合适,你可能犯了很多次我犯过的错误; Enum.TryParse可以解析字符串Buy
和Sell
,但 不能 解析字符串Side.Buy
和{{1} }。