[英]Bizarre enum.TryParse behavior
我在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
空!
以下LINQPad程序對我有用:
void Main()
{
Side side;
Enum.TryParse("Buy", out side).Dump();
side.Dump();
}
public enum Side{Buy, Sell}
我猜測您的SelectedValue
輸入實際上不是該枚舉的有效值,即使您認為是有效的。
從提供的代碼中看來,您似乎沒有問題,如果沒有的話
實際檢查SideComboBox.SelectedValue as string
的值SideComboBox.SelectedValue as string
代碼
使用Enum.TryParse重載和指定忽略大小寫的參數,像這樣
Enum.TryParse(SideComboBox.SelectedValue as string, true, out side)
這樣,如果combo
的字符串具有不同的大小寫,則它將被“捕獲”。
希望這可以幫助。
如果您再次檢查該值還可以,則可能是您犯了我無數次相同的錯誤; Enum.TryParse可以解析字符串Buy
and Sell
,但是不能解析字符串Side.Buy
和Side.Sell
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.