簡體   English   中英

奇怪的枚舉TryParse行為

[英]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.BuySide.Sell

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM