2013-10-09 2 views
0

В следующем коде C# cboRole возвращает Guid.Как использовать оператор switch с Guid?

Я пытаюсь использовать его в инструкции switch для выполнения некоторых действий.

cboRole может возвращать только 4 разных руководства, поэтому я считаю, что переключатель является хорошим вариантом для меня.

Дело в том, что все случаи игнорируются, и я всегда получаю действие по умолчанию. Когда я отлаживаю, я ясно вижу, что cboRole возвращает значение, как на следующем принт-экране.

Что такое правильный способ «сравнить» Guids в C# переключатель заявление

Код:

if (!cboRole.IsNull) 
{ 
    switch (cboRole.EditValue.ToStringEx()) 
     { 
      case "532E8EED-9E72-42E0-871E-36470C1AE327": 
       param1 = "4E08BA7C-E81F-40AE-92F0-DF33A98DD0BB"; 
       MessageBox.Show("It's working"); 
       break; 
      case "FA7637E9-A9E4-4D57-A59B-80615424D27F": 
       param1 = "E540C382-F22C-4FE2-9068-1E10AA8DD076"; 
       break; 
      case "2734CCD9-93E6-4A86-8B83-5EA9E62FA921": 
       param1 = "8A54F8D5-5B74-4B3F-A29A-D423AA8DD02E"; 
       break; 
      default: 
       MessageBox.Show("Not Working"); 
       break; 
     } 

Debug Print Screen

+1

Я не знаю, где вы получаете свою функцию ToStringEx(), но простой ToString() в guid возвращает guid в нижнем регистре. просто используйте 'cboRole.EditValue.ToString(). ToUpper()' и вы должны быть хорошими. – igelineau

+2

Не имеет значения, что такое 'EditValue', все, что имеет значение, является тем, что возвращается методом' ToStringEx() '. –

+0

также вы должны подумать о создании констант со значимыми именами и сохранить в них свои GUID, а не просто использовать их в своем коммутаторе. 'const string MyGuidValue1 =" 532E8EED-9E72-42E0-871E-36470C1AE327 ";' – igelineau

ответ

7

Ваш коммутатор заявления в верхнем регистре, а ваш ToStringEx() возвращает Guid в нижнем регистре.

Вы можете использовать

switch (cboRole.EditValue.ToStringEx().ToUpper()) 

или изменить case заявления.

+0

+1, реализация ToString по умолчанию для GUID также возвращает GUID нижнего регистра. – Habib

+1

Знаете ли вы, что делает 'ToStringEx'? Можете ли вы быть уверены, что 'ToStringEx' автоматически не преобразует строку в верхний регистр? Можете ли вы быть уверены, что 'ToStringEx' не делает других вещей? –

+2

@SamIam Это правда, что он может делать другие вещи, но я думаю, что вполне разумно предположить, что это действительно так (каламбур не предназначен). Если это не так, я уверен, что OP будет комментировать. –

Смежные вопросы