2011-03-11 4 views
0

Я получаю значение переменной enum, но при назначении его другой переменной типа enum ее получение 0 все время ... Вот код, который я использую, dbProperties - это объект класса DBProperties, который имеет член типа DBType. dbProperties.DBType всегда возвращает 0 даже после присвоения ему значения ... Пожалуйста, помогите ...!Как передать значение типа enum в другую переменную enum?

DBType val = (DBType)cbDataType.SelectedIndex; 
cbDataType.SelectedIndex = (int)val; 
dbProperties.DBType = val; 
+0

В чем смысл первых двух строк кода? Почему бы вам просто не сделать dbProperties.DBType = (DBType) cbDataType.SelectedIndex'? Кроме того, я бы предложил поместить значения actial enum в combobox и использовать их через 'SelectedItem' – Dyppl

ответ

0

Это прекрасно работает для меня. Я думаю, у вас есть форма, в которой у вас есть выпадающее поле со списком элементов. Поэтому я воспроизвел это и вот код. Выпадающий заполняется с элементами, которые соответствуют (в той мере, последовательности), показанные в коде ниже (перечисление DbType) и показанные на первом изображении прилагается

enum DBType { Int, Double, Float, Bool, String } 

    class DBProperties 
    { 
    private DBType dbType; 
    public DBType DBType { get { return dbType; } set { dbType = value; } } 
    } 

    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void cbDataType_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DBType val = (DBType)cbDataType.SelectedIndex; 
     cbDataType.SelectedIndex = (int)val; 
     var dbProperties = new DBProperties(); 
     dbProperties.DBType = val; 
    } 
    } 

свойство dbProperties.DBType правильно установлен на элемент выбранных в раскрывающемся списке. enter image description here

При выборе «bool» в выпадающем меню свойство имеет значение «Bool», как показано на втором изображении. enter image description here

0

Так dbProperties.DBType - это имя переменной, имеющей тип DBType?

Не знаете, почему он всегда будет возвращать 0, но я не думаю, что это связано с назначением значений для перечислений.

Выполнить этот код, например:

enum DBType 
{ 
    Int, 
    Bool, 
    String 
} 

class DBProperties 
{ 
    public DBType DBType; 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     DBType d = (DBType)2; 
     DBProperties p = new DBProperties(); 
     p.DBType = d; 
     Console.WriteLine((int)p.DBType); //outputs 2 
     Console.ReadLine(); 
    } 
} 
+1

@Chris, это не является способом объяснить перечисления, поскольку вы назначаете значение 2, которое не является значением какого-либо из элементы эмнов. Для двух элементов в перечислении значения (если не указано иное) равны 0 и 1. C# позволяет (ошибочно) присваивать значения за пределами enum (к сожалению). Если вы назначаете первую переменную 1 и затем удаляете трансляцию в int в вызове eConsole.Writeline(), вы увидите, что она выводит «Bool» вместо «2». –

+0

Да, я знаю, я только создавал более полную версию кода, уже предоставленного, чтобы доказать, что он не будет выводить 0. –

+0

Конструктор, используемый в классе DBProperties. private DBType dbType = new DBType(); public DBType DBType { { возвращение dbType; } set { dbType = DBType; } } Я пробовал этот кусок кода, но все еще не работал ... это что-то не так с моим классом DBProperties? – NewBie

0

Вы должны быть гораздо более четкими и конкретными с вашим вопросом для того, чтобы люди, чтобы помочь вам.

Вы уверены, что val не всегда равен нулю? Если вы всегда выбираете первый вариант в раскрывающемся списке, selectIndex всегда будет равен нулю.

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