Frage

Ist es möglich, einen enum-mit nur zahlen in C#?In meinem Programm habe ich eine variable, Gewinnen, das kann nur eingestellt werden zu 1, 2, 4 und 8.Ich bin mit einem propertygrid-Steuerelement zur Anzeige und setzen Sie diesen Wert.Wenn ich auf erstellen Sie ein enum wie diese...

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

und ich habe meine gain-variable vom Typ GainValues dann in der Dropdown-Liste im propertygrid-Steuerelement würde nur zeigen die verfügbaren Werte für die variable gain.Das problem ist, ich möchte die gain-Werte zu Lesen, numerisch eine, nicht durch Worte.Aber ich kann nicht erstellen eine enum-wie diese:

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

So gibt es einen anderen Weg, dies zu tun?Vielleicht erstellen Sie einen benutzerdefinierten Typ?

War es hilfreich?

Lösung

Dies ist nicht, wie enums Arbeit. Eine Aufzählung erlauben Sie zu dem Namen, der einen bestimmten Wert, so dass Sie können finden es in Ihrem code mehr sinnvoll.

Wenn Sie wollen zu begrenzen die Domäne der gültigen numerischen, Enumerationen, die möglicherweise nicht die richtige Wahl. Eine alternative ist das anlegen einer Sammlung von gültige Werte dass kann verwendet werden als Gewinne:

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

Wenn Sie wollen, um diese besser typesafe, Sie könnten sogar erstellen Sie einen benutzerdefinierten Typ mit einem privaten Konstruktor definieren Sie alle gültigen Werte als statische, öffentliche Instanzen, und dann setzen Sie Sie auf diese Weise.Aber du bist immer noch gehen zu müssen, geben Sie die jeweils gültige Wert einen Namen - da in C# - Mitglied/Variablen-Namen dürfen nicht mit einer Zahl beginnen (obwohl Sie können, die Sie enthalten).

Nun, wenn das, was Sie wirklich wollen, ist, weisen bestimmte Werte für die Einträge in einer GainValues enumeration, das KÖNNEN Sie tun:

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

Andere Tipps

Es gab eine Menge Antworten auf diese bereits aber ich werde eine andere Lösung.Wenn Sie möchten, dass Ihre Kontrolle zu zeigen tatsächliche Anzahl, im Gegensatz zu dem englischen Wort für die Anzahl, die in Ihrer Kontrolle, die Sie verwenden können-Daten-Anmerkungen.

using System.ComponentModel.DataAnnotations;

private enum GainValues 
{
 [Display(Name = "1")]
 One,
 [Display(Name = "2")]
 Two,
 [Display(Name = "4")] 
 Four, 
 [Display(Name = "8")]
 Eight
}

Dies ist nützlich, überall in Ihrem Programm, wo Sie wollen, verwenden Sie einen Anzeigenamen im Gegensatz zu einem Mitglied der eigentliche name.

Wenn ich verstanden habe die ursprüngliche Frage richtig beantworten kann dies sein:

Sie können erhalten Sie zahlen, die in einem enum in der Inspektor, indem Sie einfach mit einem Unterstrich-Präfix, e.g:

public enum MyNumbers{ _1, _2, _3, _4 };
public MyNumbers myNumbers;

Hoffe das hilft!

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

sollte funktionieren.

Update:OK, ich denke, dass ich Sie falsch verstanden es.

Vielleicht könnten Sie einen KeyValuePair<string, int> und binden Sie dann den Namen und den Wert für den Schlüssel und den Wert der Eigenschaft jeweils.

Leider, werden die Symbole in C# können zahlen enthalten, aber nicht start mit zahlen.So, du bist gonna haben, um mit Worten.

Alternativ, Sie könnte tun Gain1, Gain2, etc.

Oder Sie könnten darauf verzichten, eine enum-insgesamt und Konstanten verwenden und der internen Verarbeitung ab.

verwenden der expliziten Wertzuweisung in enum:

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

Dann Durchlaufen diese Werte gehen Sie wie folgt vor:

GainValues currentVal;

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

Dann können Sie Stimmen, um die/aus int-Werten als notwendig:

int valueFromDB = 4;

GainValues enumVal = (GainValues) valueFromDB;

// enumVal should be 'Four' now

Sie können eine benutzerdefinierte Liste als Datenquelle für Ihre drop-down-Liste aus.

Code Hinter:

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-Seite:

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

Darüber hinaus können Sie enum für die Einstellung default-Wert, ...

hoffe, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top