Как я могу создать перечисление с помощью чисел?

Действительно ли возможно сделать перечисление, использующее просто числа в C#? В моей программе у меня есть переменная, Усиление, которое может только быть установлено на 1, 2, 4, и 8. Я использую управление propertygrid, чтобы отобразить и установить это значение. Если я должен был создать перечисление как это...

 private enum GainValues {One, Two, Four, Eight}

и я сделал свою переменную усиления типа GainValues затем, выпадающий список в propertygrid только покажет доступные значения для переменной усиления. Проблема, я хочу, чтобы значения усиления читали численно не как слова. Но я не могу создать перечисление как это:

 private enum GainValues {1,2,4,8}

Так есть ли другой способ сделать это? Возможно, создавая пользовательский тип?

11
задан PICyourBrain 1 June 2010 в 18:19
поделиться

5 ответов

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

Если вы хотите ограничить область допустимых чисел, перечисления могут быть не совсем правильным выбором. Альтернативой может быть просто создание коллекции допустимых значений, которые могут быть использованы в качестве усилений:

private int[] ValidGainValues = new []{ 1, 2, 4, 8};

Если вы хотите сделать это более безопасным для типов, вы можете даже создать пользовательский тип с приватным конструктором, определить все допустимые значения как статические, публичные экземпляры, а затем раскрыть их таким образом. Но вам все равно придется дать каждому допустимому значению имя - поскольку в C# имена членов/переменных не могут начинаться с цифр (хотя и могут их содержать).

Теперь, если вы действительно хотите присвоить определенные значения записям в перечислении GainValues, вы можете сделать следующее:

private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 };
16
ответ дан 3 December 2019 в 02:01
поделиться

К сожалению, символы в C # могут содержать числа, но не могут начинать с цифр. Так что тебе придется использовать слова.

В качестве альтернативы вы можете использовать Gain1, Gain2 и т. Д.

Или вы можете вообще отказаться от перечисления и использовать константы и внутреннюю обработку.

0
ответ дан 3 December 2019 в 02:01
поделиться
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 }

должно работать.

Обновление: Хорошо, я думаю, что неправильно вас понял.

Возможно, вы могли бы использовать KeyValuePair и затем привязать имя и значение к свойству Key и Value соответственно.

4
ответ дан 3 December 2019 в 02:01
поделиться

используйте явное присвоение значений в перечислении:

private enum GainValues 
{
   One = 1, 
   Two = 2, 
   Four = 4, 
   Eight = 8
}

Затем для перечисления этих значений сделайте следующее:

GainValues currentVal;

foreach(currentVal in Enum.GetValues(typeof(GainValues))
{
   // add to combo box (or whatever) here
}

Затем вы можете приводить к/от ints по мере необходимости:

int valueFromDB = 4;

GainValues enumVal = (GainValues) valueFromDB;

// enumVal should be 'Four' now
0
ответ дан 3 December 2019 в 02:01
поделиться

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

Code Behind:

using GainItem = KeyValuePair<string, int>;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<GainItem> dic = new List<GainItem>();
            dic.Add(new GainItem("First", 1));
            dic.Add(new GainItem("Second", 2));
            dic.Add(new GainItem("Fourth", 4));
            ddl.DataSource = dic;
            ddl.DataBind();
        }


    }

    protected void btn_Click(object sender, EventArgs e)
    {
        Response.Write(ddl.SelectedValue);
    }
}

Asp Page:

    <div>
    <asp:DropDownList runat="server" ID="ddl" DataValueField="Value" DataTextField="Key" />
    <asp:Button ID="btn" runat="server" OnClick="btn_Click" />
   </div>

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

надеюсь это поможет

0
ответ дан 3 December 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: