13

C#で数字だけを使用して列挙型を作成することは可能ですか?私のプログラムには、1、2、4、および8にのみ設定できる変数Gainがあります。この値を表示および設定するためにpropertygridコントロールを使用しています。このような列挙型を作成するとしたら...

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

タイプGainValuesのゲイン変数を作成すると、propertygridのドロップダウンリストには、ゲイン変数に使用可能な値のみが表示されます。問題は、ゲイン値を単語としてではなく数値で読み取ってほしいということです。しかし、私はこのような列挙型を作成することはできません:

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

それで、これを行う別の方法はありますか?おそらくカスタムタイプを作成しますか?

4

7 に答える 7

18

これはどのように機能するかではありませんenums列挙型を使用すると、特定の値に名前を付けて、コード内でより適切に参照できるようになります。

有効な数値の定義域を制限したい場合は、列挙型が正しい選択ではない可能性があります。別の方法は、ゲインとして使用できる有効な値のコレクションを作成することです。

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

これをよりタイプセーフにしたい場合は、プライベートコンストラクターを使用してカスタム型を作成し、すべての有効な値を静的なパブリックインスタンスとして定義して、その方法で公開することもできます。ただし、C#ではメンバー/変数名を数字で始めることはできないため(ただし、それらを含めることはできます)、有効な各値に名前を付ける必要があります。

ここで、本当に必要なのが、GainValues列挙のエントリに特定の値を割り当てることである場合は、次のことができます。

private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 };
于 2010-06-01T18:21:58.100 に答える
13

これについてはすでにかなりの回答がありますが、別の解決策を提供します。コントロール内の番号の英語の単語ではなく、実際の番号をコントロールに表示する場合は、データ注釈を使用できます。

using System.ComponentModel.DataAnnotations;

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

これは、メンバーの実際の名前ではなく、わかりやすい名前を使用するプログラムのどこでも役立ちます。

于 2013-06-09T21:01:36.470 に答える
6

元の質問を正しく理解した場合、答えは次のようになります。

アンダースコアプレフィックスを使用するだけで、インスペクターの列挙型にリストされた数値を取得できます。例:

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

これがお役に立てば幸いです。

于 2012-11-11T14:41:11.383 に答える
4
private enum GainValues { One = 1, Two = 2, Four = 4, Eight = 8 }

動作するはずです。

更新:わかりました、私はそこであなたを誤解したと思います。

たぶん、aを使用しKeyValuePair<string, int>て、名前と値をそれぞれKeyプロパティとValueプロパティにバインドできます。

于 2010-06-01T18:21:02.703 に答える
0

ドロップダウンリストのデータソースとして1つのカスタムリストを使用できます。

コードビハインド:

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>

さらに、デフォルト値を設定するための列挙型を持つことができます...

お役に立てれば

于 2010-06-01T20:15:53.663 に答える
0

列挙型で明示的な値の割り当てを使用します。

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
}

次に、必要に応じてintとの間でキャストできます。

int valueFromDB = 4;

GainValues enumVal = (GainValues) valueFromDB;

// enumVal should be 'Four' now
于 2010-06-01T18:21:53.560 に答える
0

残念ながら、C#の記号には数字を含めることができますが、数字で始めることはできません。だからあなたは言葉を使わなければならないでしょう。

または、Gain1、Gain2などを実行することもできます。

または、列挙型を完全に放棄して、定数と内部処理を使用することもできます。

于 2010-06-01T18:22:02.717 に答える