未能为枚举赋值

时间:2012-02-14 08:55:04

标签: c# enums

你有没有一天什么都行不通?现在我甚至无法成功设置枚举的值!

我在底部的Enum.Parse语句遇到问题,所以我在它上面写了'if'块。令我惊讶的是,这也失败了。

我用调试器跟踪了这个。字符串x的值为“OnDemand”。第一个'if'的“true”分支被采用,但bitmapCacheOption保持BitmapCacheOption.Default

同样适用于下面的Enum.Parse表达式。所以我的问题是:在为枚举赋值时我做错了什么?

BitmapCacheOption bitmapCacheOption;
if (x == "OnDemand") bitmapCacheOption = BitmapCacheOption.OnDemand;
else
{
   if (x == "OnLoad") bitmapCacheOption = BitmapCacheOption.OnLoad;
   else
   {
      if (x == "None") bitmapCacheOption = BitmapCacheOption.None;
      else bitmapCacheOption = BitmapCacheOption.Default;
   }
}
BitmapCacheOption bitmapCacheOption1 =
            (BitmapCacheOption)Enum.Parse(typeof(BitmapCacheOption), x, false);
Debug.Assert(bitmapCacheOption == bitmapCacheOption1);

编辑:问题中的枚举是一个WPF,BitmapCacheOption。 Enum.Parse语句末尾的false只是means忽略该情况。我知道更好的方法来编写级联的'if'语句(包括“else if”和“switch”语句),但所有这些都是问题所在。我在调试期间以这种方式编写了'if',以便我可以使用调试器。重要的是,即使是简单的if,当x等于“OnDemand”时,bitmapCacheOption保持BitmapCacheOption.Default!

编辑:注意调试器的Locals窗口中“bitmapCacheOption”的值 - 它保持在“Default”状态,即使黄色突出显示“OnDemand”swithc案例也是如此!

Debugger Snap:

2 个答案:

答案 0 :(得分:4)

尝试删除false运算符 -

BitmapCacheOption bitmapCacheOption1 =
            (BitmapCacheOption)Enum.Parse(typeof(BitmapCacheOption), x);

在路上 - 上传Enum结构给我们,看看是否有问题。

编辑:哇!

enter image description here

看起来他们有一个错误 - 两个索引为0。 这就是每次都获得默认值的原因。因为它很好......但是当你将值设置为x时 - 它会将0指定为YYY而不是YYY值应该存在....

答案 1 :(得分:2)

你这里没有做错......

看看Enum的定义:

// Summary:
//     Specifies how a bitmap image takes advantage of memory caching.
public enum BitmapCacheOption
{
    // Summary:
    //     Creates a memory store for requested data only. The first request loads the
    //     image directly; subsequent requests are filled from the cache.
    OnDemand = 0,
    //
    // Summary:
    //     Caches the entire image into memory. This is the default value.
    Default = 0,
    //
    // Summary:
    //     Caches the entire image into memory at load time. All requests for image
    //     data are filled from the memory store.
    OnLoad = 1,
    //
    // Summary:
    //     Do not create a memory store. All requests for the image are filled directly
    //     by the image file.
    None = 2,
}

OnDemandDefault的值均为0;)

所以你不能依赖0的字符串表示作为BitmapCacheOption的值。