2017-05-29 31 views
-7

はI列挙型のセッターとゲッター

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

これは有用であろう(コンパイルされません)は、本日の構築以下の使用しているだろうか?

EDIT - 発言を受けて

説明:

私が使用することはできません初めての値を持つ方を求めていました。私は、作成したときに何もしなかったSoundクラスを持っていました。音はその状態によって違ったことをしました。このクラスは、他のプログラマによって使用されることがあります。それが記録または再生されると、決して「None」に戻ることはできません。私はオプションではないときにIntellisenseに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行のコードが必要です。

+1

あなたは何を求めていますか? 'enum'値は定数です。特定の列挙定数の基礎となる整数値を変更できることが有用であると言っていますか?あなたはそれについて多くの合意を見つけるだろうと思う。そのようなものが必要な場合は、 'int'プロパティ' None'、 'Recorded'、' Played'などを含むクラスを作成します。 –

+0

構文と使用法が間違っているためコードがコンパイルされません)。あなたの質問も明確ではありません... – Svek

+0

@BobKaufmanあなたはどちらも正しいです。同じことをする方法は複数ありますが、インテリセンスの問題は解決しません。私はブールを使用することができた?またはint?一見して理解しにくいアクセサまたは他の独創的なコードを持つ構造体。上記を参照 – Paulustrious

答えて

1

20分の時点で8つの下降音がありますので、私の質問は私のものではなく、一般的な意見で答えると思います。これはおそらくC#8に組み込まれていないでしょう。

また、この質問と別の問題により、私はさらなる質問をすることができませんでした。私はそれが私の同僚の陪審員で実現し、私はそれが罰

0

列挙型は、ラベル付き単に一定の整数値であることを保証することを質問がそう凶悪思わなかった...

ので

public enum RecordedOrPlayed 
{ 
    None, 
    Recorded, 
    Played 
} 

あなたがTRYIは何

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

にコンパイルしてしまうだろうあなたの使い方で達成するためには、getterとsetterで話している種類の動作にコンパイルすることはありません。enumがまったく設計されていないからです。

この重大な誤解は、下位票がどこから来ているかです。あなたが提案している何

は、人々があなたの質問を理解していない理由あなたが見ることができる... public constを隠す、というのは同じですインテリセンスからenumを隠しています。

+0

の略語ですが、これはさまざまな方法で実行でき、有効な構文である可能性があります。 – Paulustrious

+0

タイムアウト。 @Svec私は理解していますが、さまざまな方法で行うことができ、 '{[EnumNoSet] None、[EnumSet(すなわちデフォルト)] Recorded、Played}のような有効な構文にすることができます。あなたが 'Task RecordAsync().....を持っているときに、戻り値でラウンドする方法を見てください。ところで、私は「なぜ」を押して、他の人に彼らの「理由」と「理由なし」を伝えさせないように、簡単に言葉で言いました。それは間違いでした。 BobKに私は助けを読むでしょう。 – Paulustrious

+0

@ PaululustriousなぜEnumsを返すFactoryパターンを使用しないのですか?あなたが求めていることをするようです。 – Svek

関連する問題