Неспособность присвоить значение перечислению - PullRequest
0 голосов
/ 14 февраля 2012

Был ли у вас день, когда ничего не работает?Теперь я даже не могу установить значение перечисления!

У меня были проблемы с оператором Enum.Parse внизу, поэтому я написал над ним блок 'if'.К моему удивлению, это тоже не удалось.

Я проследил это с помощью отладчика.Значение строки x равно «OnDemand».Первая «истинная» ветвь «if» берется, но 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 .Значение false в конце оператора Enum.Parse, равное , означает , чтобы игнорировать регистр.Я знаю о лучших способах написания каскадных операторов if (включая операторы else if и switch), но все это не относится к проблеме.Я написал «если» таким образом во время отладки, чтобы позволить мне перейти к отладчику.Важно то, что даже при простом условии, если x равен «OnDemand», bitmapCacheOption остается BitmapCacheOption.Default!

edit : обратите внимание на значение «bitmapCacheOption» в окне Locals отладчика - оно остается в «Default», даже если желтая подсветка показывает, что случай «OnDemand» был взят!

Debugger Snap:

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

попробуйте удалить ложный оператор -

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

И в пути - Загрузите структуру Enum для нас, чтобы увидеть, есть ли проблема.

редактировать: вау!

enter image description here

похоже, что у них есть ошибка - оба index с 0. Вот почему вы получаете значение по умолчанию каждый раз. потому что это 0. это хорошо ... но когда вы устанавливаете значение в x - он присваивает ему 0 вместо другого значения YYY, которое должно быть там ...

2 голосов
/ 14 февраля 2012

Вы не делаете ничего плохого здесь ...

Посмотрите на определение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...