簡體   English   中英

Enum.TryParse奇怪的行為

[英]Enum.TryParse strange behaviour

為什么這個測試通過了? TestEnum不包含值為“5”的選項。 所以這個測試應該失敗,但事實並非如此。

        private enum TestEnum
        {
            FirstOption = 2,
            SecontOption = 3
        }

        [Test]
        public void EnumTryParseIntValue()
        {
            TestEnum enumValue;

            bool result = Enum.TryParse<TestEnum>(5.ToString(), out enumValue);

            Assert.IsTrue(result);
        }

Enum.TryParse方法(String,TEnum)

如果value是與TEnum的命名常量不對應的名稱,則該方法返回false。 如果value是不表示TEnum枚舉的基礎值的整數的字符串表示形式,則該方法返回枚舉成員,其基礎值的值轉換為整數類型。 如果不希望出現這種情況,請調用IsDefined方法以確保整數的特定字符串表示形式實際上是TEnum的成員。

“返回其基礎值轉換為整數類型的枚舉成員”
如果該值不存在,則返回整數。 我不認為回到5是“枚舉成員”,但這就是它的工作原理。 如果您解析2,則獲得FirstOption。

if (Enum.IsDefined(typeof(TestEnum), 5.ToString()))
{
    result = Enum.TryParse<TestEnum>(5.ToString(), out enumValue);
    Debug.WriteLine(result);
    if (result)
    {
        Debug.WriteLine(enumValue.ToString());
    }
}

使用Enum.IsDefined(Type enumType,Object value) - 返回指示指定枚舉中是否存在具有指定值的常量的指示。

MSDN:Enum.IsDefined方法

暫無
暫無

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

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