關於 Enum.TryParse 方法的一個小坑…


今天在測試導入數據的時候,突然發現本應該是枚舉內容的數據,導入了進了一個很大的不在枚舉定義內的數字。

記得當時用的是 Enum.TryParse 方法對導入的文本進行校驗的,於是調試了一下,發現果然是它的問題…

public enum Gender
{
    保密 = 0,
    男 = 1,
    女 = 2,
    其他 = 3
}

static void Main(string[] args)
{
    Gender gender;

    // 雖然 199 不在枚舉定義中,但此轉換是成功的!!!
    if (Enum.TryParse("199", out gender))
    {
        // 需要通過此方法再次確定是否是枚舉實際定義的內容
        if (Enum.IsDefined(typeof(Gender), gender))
        {
            Console.WriteLine(gender.ToString());
        }
        else
        {
            Console.WriteLine("非枚舉成員");
        }

    }
    else
    {
        Console.WriteLine("轉換失敗");
    }

    Console.ReadKey();
}

如上面代碼所示,要加上 IsDefined 的判斷,才能真正的完成校驗。

其實關於這個功能,MSDN 的文檔中是有寫的:https://msdn.microsoft.com/zh-cn/library/dd783499(v=vs.110).aspx

如果 value 是不對應的一個命名常量的名稱 TEnum, ,該方法返回 false。 如果 value 是一個整數,它不表示的基礎值的字符串表示 TEnum 枚舉,該方法返回一個枚舉成員,其基礎值為 value 轉換為整數類型。 如果不需要此行為,則調用 IsDefined 方法,以確保特定字符串的整數表示形式是實際的成員 TEnum。

好吧,只能怪自己不認真看書了~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM