Действительно ли возможно сделать перечисление, использующее просто числа в C#? В моей программе у меня есть переменная, Усиление, которое может только быть установлено на 1, 2, 4, и 8. Я использую управление propertygrid, чтобы отобразить и установить это значение. Если я должен был создать перечисление как это...
private enum GainValues {One, Two, Four, Eight}
и я сделал свою переменную усиления типа GainValues затем, выпадающий список в propertygrid только покажет доступные значения для переменной усиления. Проблема, я хочу, чтобы значения усиления читали численно не как слова. Но я не могу создать перечисление как это:
private enum GainValues {1,2,4,8}
Так есть ли другой способ сделать это? Возможно, создавая пользовательский тип?
Это не то, как работают перечисления
. Перечисления позволяют вам назвать конкретное значение, чтобы вы могли ссылаться на него в коде более разумно.
Если вы хотите ограничить область допустимых чисел, перечисления могут быть не совсем правильным выбором. Альтернативой может быть просто создание коллекции допустимых значений, которые могут быть использованы в качестве усилений:
private int[] ValidGainValues = new []{ 1, 2, 4, 8};
Если вы хотите сделать это более безопасным для типов, вы можете даже создать пользовательский тип с приватным конструктором, определить все допустимые значения как статические, публичные экземпляры, а затем раскрыть их таким образом. Но вам все равно придется дать каждому допустимому значению имя - поскольку в C# имена членов/переменных не могут начинаться с цифр (хотя и могут их содержать).
Теперь, если вы действительно хотите присвоить определенные значения записям в перечислении GainValues, вы можете сделать следующее:
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 };
К сожалению, символы в C # могут содержать числа, но не могут начинать с цифр. Так что тебе придется использовать слова.
В качестве альтернативы вы можете использовать Gain1, Gain2 и т. Д.
Или вы можете вообще отказаться от перечисления и использовать константы и внутреннюю обработку.
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 }
должно работать.
Обновление: Хорошо, я думаю, что неправильно вас понял.
Возможно, вы могли бы использовать KeyValuePair
и затем привязать имя и значение к свойству Key и Value соответственно.
используйте явное присвоение значений в перечислении:
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
Вы можете использовать один пользовательский список в качестве источника данных для вашего выпадающего списка.
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>
Кроме того, вы можете иметь перечисление для установки значения по умолчанию, ...
надеюсь это поможет