你有没有一天什么都行不通?现在我甚至无法成功设置枚举的值!
我在底部的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案例也是如此!
答案 0 :(得分:4)
尝试删除false运算符 -
BitmapCacheOption bitmapCacheOption1 =
(BitmapCacheOption)Enum.Parse(typeof(BitmapCacheOption), x);
在路上 - 上传Enum结构给我们,看看是否有问题。
看起来他们有一个错误 - 两个索引为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,
}
OnDemand
和Default
的值均为0;)
所以你不能依赖0的字符串表示作为BitmapCacheOption
的值。