尋找在C#代碼優化,讓我都定義了一個枚舉,並同時放創建枚舉的類型的變量:在C#中,是否有辦法在同一時間定義枚舉和該枚舉的實例?
前:
enum State {State1, State2, State3};
State state = State.State1;
後(不工作):
enum State {State1, State2, State3} state;
state = State.State1;
這樣的事情是否存在?
尋找在C#代碼優化,讓我都定義了一個枚舉,並同時放創建枚舉的類型的變量:在C#中,是否有辦法在同一時間定義枚舉和該枚舉的實例?
前:
enum State {State1, State2, State3};
State state = State.State1;
後(不工作):
enum State {State1, State2, State3} state;
state = State.State1;
這樣的事情是否存在?
在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;
}
顯然,這不是一個實際的枚舉,你沒有那個枚舉類型爲您提供的糖,但你仍然可以使用二元運算符,如OR,AND或其他實際枚舉的條件。
我不知道爲什麼有時候我們會得到降低成本O_o – 2015-01-09 11:05:24
它不適用於'switch',因爲它不是恆定的。也'var someFakeEnum = {State1 = 0,State2 = 1};'不起作用,那裏應該有一個'新'。 – Haocheng 2015-03-29 13:39:18
@Haocheng固定。我刪除了'switch'部分。那是錯的。 – 2015-03-29 14:01:31
從C/C++切換,我想?
不,不能這樣做
這不是一個優化。
不,沒有這樣的東西存在,並有充分的理由。它的可讀性要低得多,並且絕對有這樣做的好處。用兩個單獨的聲明來聲明它們並且完成它。
如果你從字面上得到報酬,以減少你的源代碼行數,就這樣寫:
enum State {State1, State2, State 3}; State state = State.State1;
(是的,這是一個笑話居多。)
不,在C#中,聲明或類型以及使用該類型聲明變量是分開的。
在C/C++中,通常直接聲明和使用類型,例如struct
關鍵字。在C#中它們是分開的。
注意,在C#中你不需要申報的enum
(或class
或struct
)後的分號:
enum State { State1, State2, State3 }
它仍然允許雖然,想必是用C多一點兼容/ C++語法。
即使有這樣一種方式,它也不會再被優化。 'enum State {State1,State2,State3}'不會在運行時花費任何東西。 – 2011-05-30 14:59:48