Как создать перечисление с помощью чисел?
можно ли сделать перечисление, используя только числа в C#? В моей программе есть переменная Gain, которая может быть установлена только на 1, 2, 4 и 8. Я использую элемент управления propertygrid для отображения и установки этого значения. Если бы я создал такое перечисление...
private enum GainValues {One, Two, Four, Eight}
и я сделал свою переменную усиления типа GainValues, тогда раскрывающийся список в propertygrid будет показывать только доступные значения для переменной усиления. Проблема в том, что я хочу, чтобы значения усиления считывались численно, а не как слова. Но я не могу создать перечисление, как это:
private enum GainValues {1,2,4,8}
Итак, есть ли другой способ сделать это? Возможно создание пользовательского типа?
7 ответов
не так enums
работа. перечисление позволяет вам назвать определенное значение, чтобы вы могли ссылаться на него в своем коде более разумно.
если вы хотите ограничить область допустимых чисел, перечисления могут быть неправильным выбором. альтернативой является просто создание коллекции допустимые значения что можно использовать как увеличения:
private int[] ValidGainValues = new []{ 1, 2, 4, 8};
Если вы хотите сделать это более безопасным, вы даже можете создать пользовательский тип с частный конструктор определяет все допустимые значения как статические, общедоступные экземпляры, а затем предоставляет их таким образом. Но вам все равно придется дать каждому допустимому значению имя - так как в C# имена членов/переменных не могут начинаться с числа (хотя они могут содержать их).
теперь, если вы действительно хотите, чтобы назначить определенные значения для записей в перечислении GainValues, что вы можете сделать:
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 };
на это уже было много ответов, однако я предложу другое решение. Если вы хотите, чтобы ваш элемент управления отображал фактическое число, а не английское слово для числа в элементе управления, вы можете использовать аннотации данных.
using System.ComponentModel.DataAnnotations;
private enum GainValues
{
[Display(Name = "1")]
One,
[Display(Name = "2")]
Two,
[Display(Name = "4")]
Four,
[Display(Name = "8")]
Eight
}
это полезно в любом месте вашей программы, где вы хотите использовать понятное имя, а не фактическое имя участника.
Если я правильно понял исходный вопрос, то ответ может быть такой:
вы можете получить номера, перечисленные в перечислении в инспекторе, просто используя префикс подчеркивания, e.g:
public enum MyNumbers{ _1, _2, _3, _4 };
public MyNumbers myNumbers;
надеюсь, это поможет!
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 }
должны работать.
Update: хорошо, я думаю, что я неправильно понял вас там.
может быть, вы могли бы использовать KeyValuePair<string, int>
и затем привязать имя и значение к свойству Key и Value соответственно.
к сожалению, символы в C# могут содержать числа, но не могут старт С цифрами. Так что тебе придется использовать слова.
альтернативно, вы можете сделать Gain1, Gain2 и т. д.
или вы можете вообще отказаться от перечисления и использовать константы и внутреннюю обработку.
используйте явное присвоение значения в перечислении:
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
Вы можете использовать один пользовательский список как источник данных для выпадающего списка.
Код:
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:
<div>
<asp:DropDownList runat="server" ID="ddl" DataValueField="Value" DataTextField="Key" />
<asp:Button ID="btn" runat="server" OnClick="btn_Click" />
</div>
кроме того, вы можете иметь перечисление для задания значения по умолчанию ...
надеюсь, что это помогает