8

列挙型の定義とその列挙型の型の変数の作成の両方を同時に行うことができるc#のコード最適化を探しています。

前:

    enum State {State1, State2, State3};
    State state = State.State1;

後(動作しません):

    enum State {State1, State2, State3} state;
    state = State.State1;

そのようなものはありますか?

4

5 に答える 5

8

C# ではこれをサポートしていませんが、何らかの状態を切り替えるだけで特別な操作を行う必要がない場合は、タプルまたは匿名型を使用してこれを回避し、列挙型に「近い」ことを行うことができます。 .

たとえば、タプルを使用すると、次のことができます。

var someFakeEnum = Tuple.Create(0, 1);

更新

C# 7 では、構文タプルが導入されました。

var someFakeEnum = (State1: 0, State2: 1);

または匿名型の場合:

var someFakeEnum = new { State1 = 0, State2 = 1 };

その後、次のようなことができます。

int state = 0;

// If you're using tuples...
if(some condition)
{
    state = someFakeEnum.Item2;
}

// ...or if you're using anonymous types or C# >= 7 tuples...
if(some condition) 
{
    state = someFakeEnum.State2;
}

明らかに、これは実際の列挙ではなく、Enum 型が提供する糖分はありませんが、OR、AND などの二項演算子や、他の実際の列挙と同様の条件を使用できます。

于 2011-05-30T15:07:45.037 に答える
5

これは最適化ではありません。

いいえ、そのようなものは存在しません。それには正当な理由があります。読みにくく、そうすることで得られるメリットはまったくありません。それらを 2 つの別々のステートメントで宣言し、それで完了します。

ソースコードの行数を減らすために文字通り報酬を得ている場合は、次のように記述します。

enum State {State1, State2, State 3}; State state = State.State1;

(はい、それは冗談です。ほとんどです。)

于 2011-05-30T14:59:14.617 に答える
2

C/C++ からの切り替えかな?

いいえ、それはできません

于 2011-05-30T14:57:36.770 に答える
1

いいえ、それは存在しません。また、それは非常に読みやすい私見ではありません

于 2011-05-30T14:57:05.803 に答える
0

いいえ、C# では、宣言または型と、その型を使用して変数を宣言することは別です。

C/C++ では、たとえばstructキーワードを使用して、型を直接宣言して使用するのが一般的です。C# では、それらは分離されています。

enumC# では、 (または aclassまたは a struct)を宣言した後にセミコロンは必要ないことに注意してください。

enum State { State1, State2, State3 }

ただし、おそらく C/C++ 構文との互換性をもう少し高めるために、まだ許可されています。

于 2011-05-30T15:06:48.517 に答える