2012-02-28 96 views
0

我有一個WPF窗口派生類中以下屬性定義:怪異enum.TryParse行爲

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(即,使得第二的身體如果要執行的語句,因此返回null)。我看的字符串值,看看它實際上是枚舉的有效值果然是。即使將有效字符串發送到TryParse時,爲什麼解析始終會失敗?

這裏是枚舉定義:

enum Side 
    { 
    Buy, 
    Sell 
    } 

更新:OK傢伙,一定LOL時刻在這裏。原來,的SelectedValue真的返回了枚舉本身,而不是一個字符串,但是當我在調試器中查看它總是含蓄地將其轉換爲字符串。最後,閱讀您的意見後,我決定以實際雙擊在監視窗口中的價值,才發現我的恐懼,該值是MyApp.Side.Sell - 一個枚舉,而不是一個字符串。所以,粉筆另一個用於檢查as結果爲非空!

+4

檢查SideComboBox.SelectedValue的'返回值作爲string'仔細... – 2012-02-28 22:15:03

+0

你檢查作爲string''SideComboBox.SelectedValue的價值? – remio 2012-02-28 22:15:45

+0

請參閱更新並感謝球員! – 2012-02-28 22:19:28

回答

1

以下LINQPad程序的工作對我來說:

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

public enum Side{Buy, Sell} 

我猜你SelectedValue輸入不實際上爲枚舉的有效值,即使你認爲它是。

0

從提供沒有在我看來,你應該有一個問題的代碼,如果沒有

  • 檢查實際上是SideComboBox.SelectedValue as string代碼

  • 使用Enum.TryParse過載與價值參數,指定要忽略的情況下,像這樣

    Enum.TryParse(SideComboBox.SelectedValue as string, true, out side)

這樣,如果在combo字符串有不同的情況下,將由方式「逮住」。

希望這會有所幫助。

0

如果你仔細檢查過的值是確定的,你可能做我做了無數次同樣的錯誤; Enum.TryParse可以解析字符串BuySell,但它不能解析字符串Side.BuySide.Sell