2017-05-29 115 views
-7

我可以用下面的構造今日(不編譯)枚舉setter和getter

public enum RecordedOrPlayed 
{ 
    None {get,private set} 
    Recorded, 
    Played 
} 
enum SoundStatus = SoundStatus.None 

這將是有用的?

編輯 - 響應言論

說明:

我想具有不能使用的第一時間值的方式。 II有一個Sound類,創建時什麼都不做。聲音根據其狀態做了不同的事情。該類可以被其他程序員使用。一旦它錄製或播放,它永遠不會返回None。當它不是一個選項時,我不希望智能感知提示None。由於C#7,我們可以做到這一點的性質

public string str {get; private set;} = "First time only"; 

我意識到這可能會喜歡的東西做...

public RecordedOrPlayed recordedOrPlayed 
    { 
     get { return _recordedOrPlayed; } 
     set 
     { 
      if (value == RecordedOrPlayed.None) 
       throw new ArgumentException("yada yada"); 
      _recordedOrPlayed = value; 
     } 
    } 

...但它是醜陋的,難在把握一目瞭然,增加了另一個變量,需要10行代碼來替換setter。

+1

你在問什麼? enum的值是常量。您是否認爲能夠更改特定枚舉常量的基礎整數值會很有用?我懷疑你會發現很多共識。如果你需要類似的東西,我會創建一個包含'int'屬性'None','Recorded','Played'等的類。 –

+0

你的代碼不會編譯,因爲語法和用法顯然是錯誤的說明)。你的問題也不清楚... – Svek

+0

@BobKaufman你是對的。我意識到做同樣的事情有多種方式,但它不能解決intellisense問題。我可以用一個布爾?或int?,一個帶有訪問器的結構或其他一些難以理解的代碼。見上面 – Paulustrious

回答

1

截至20分鐘有8個降價,所以我認爲這個問題不是由我回答,而是由流行的意見。這可能不會被納入C#8

此外,這個問題和另一個問題導致我被禁止問進一步的問題。我意識到這是我的同齡人組成的評審團,但我沒想到的問題,以便令人髮指的,它保證處罰

0

枚舉是簡單的常量整數值與標籤...

所以

public enum RecordedOrPlayed 
{ 
    None, 
    Recorded, 
    Played 
} 

最終會編譯成

public const int RecordedOrPlayed_None = 0; 
public const int RecordedOrPlayed_Recorded = 1; 
public const int RecordedOrPlayed_Played = 2; 

你tryi什麼在你使用的時候達到目的,永遠不會編譯成你正在討論的吸氣和吸氣設備的行爲,因爲它不是根本設計的。

這個關鍵的誤解是你所有的倒票都來自哪裏。

你所建議的是隱藏智能感知,這是說的當量的enum隱藏public const ...你可以看到爲什麼人們不理解你的問題。

+0

的速記我明白,但它可以以各種方式完成並且是有效的語法。 – Paulustrious

+0

超時。 @Svec我明白,但它可以用各種方式完成,並且是有效的語法,如'{[EnumNoSet] None,[EnumSet(即默認)] Recorded,Played}'編譯器可以做任何事情。當你有任務 RecordAsync().....返回「忽略」''看看它回放值的方式。順便說一句,我這麼簡短地提出這個問題,以免推動我的'爲什麼',讓別人給他們'爲什麼'和'爲什麼不'。那是一個錯誤。對於BobK我會閱讀幫助。 – Paulustrious

+0

@Paulustrious那麼爲什麼你不使用返回枚舉的工廠模式?它似乎在做你在問什麼。 – Svek