доступ к типам перечислений получил ошибку, используя c # в winforms - PullRequest
0 голосов
/ 25 августа 2011

привет, у меня проблема с типами enum

Я делаю так ....

namspace XXXXXXxx
{
 public partial class form1:form
  {

          ////////
       and i am checking the listview selected item with enum type by the             following code
      private void lstviewcategories_SelectedIndexChanged(object sender, EventArgs e)
      {

          if (lstviewcategories.SelectedItems[0].ToString() == categorytype.type1.ToString())
            { 

                    /////
                       blah blah...
            }
       }
           and  at here i am defining enum like this...
    public enum categorytype
    {
       type1 = "ALL",
         type2 ="0-500",
       type3 ="500-1000" ,
        type4 ="1000+ "                    
    }
  }

}

Я получаю ошибку в этих строках type1 = "ALL", t * ype2 = "0-500", type3 = "500-1000" * , type4 = "1000 +" говорят, что не могут неявно преобразовать строку типа в int

как я могу определить их как enum

как я могу получить доступ и сравнить с listviewcategoriesitems .....

кто-нибудь может помочь в этом ......

Ответы [ 5 ]

2 голосов
/ 25 августа 2011

Вы не можете определять перечисления как строковые значения - перечисления являются именованными числами. Если вам нужны строковые константы, вам просто нужно использовать:

public const string Type1 = "ALL";
public const string Type2 = "0-500";

... и т. Д. Если вам требуется перечисление для использования в другом месте, вы можете либо создать Dictionary<CategoryType, string> и, возможно, также обратное отображение, либо украсить каждое значение перечисления строкой в ​​атрибуте (например, [Description("ALL")]) который вы можете получить во время выполнения. Это немного неловко, но не слишком сложно.

(Также обратите внимание, что C # чувствителен к регистру - нет класса form для извлечения, и его стоит придерживаться .NET именования , чтобы сделать ваш код легче для чтения другими разработчиками. )

1 голос
/ 25 августа 2011

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

struct CategoryType
{
    public const string Type1 = "ALL";
    public const string Type2 = "0-500";
    public const string Type3 = "500-1000";
    public const string Type4 = "1000+";
}
0 голосов
/ 25 августа 2011

Как указано здесь, в MSDN , Enum может основываться на простых числовых типах значений:

byte, sbyte, short, ushort,int, uint, long или ulong

, а не String, как в вашем определении.

0 голосов
/ 25 августа 2011

Нельзя присвоить String значения Enums, они могут принимать только числа, такие как int, byte, long и т. Д. ...

0 голосов
/ 25 августа 2011

Попробуйте это

public enum categorytype
{
   ALL=1,
   From0TO500=2,
   From500To1000=3 ,
   From1000=4                    
}

, поэтому вы должны изменить значения lstviewcategories пунктов на 1,2,3, and 4

if(lstviewcategories.SelectedValue == categorytype.All.ToString())
{
   .................. 
}

или приведите SelectedValue из lstviewcategories к enum, затем сравните

categorytype mycategorytype = (categorytype)[Enum].Parse(Typeof(categorytype),lstviewcategories.SelectedValue);
if(mycategorytype == categorytype.All)
{
   .................. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...