web-dev-qa-db-ja.com

C#クラスで列挙型を使用、設定、使用する方法

クラスストアの設定を使用するプログラムがあります。 setを使用して、設定を変更および保存する関数を取得する必要があります。私はこれを試しましたが、動作しません。誰かがこれを手伝ってくれる?

    private enum _Difficulty { Easy, Normal, Hard };

    public void SetDifficulty(Difficulty)
    {
        _Difficulty = Difficulty;
    }

    public enum GetDifficulty()
    {
        return _Difficulty;
    }

enumsgetのクラスでsetを使用する方法はありませんか?

boolintも必要です。

13
user3407591

ここにはいくつかの問題点があります:

  • 列挙型はプライベートですが、メソッドはパブリックです。したがって、メソッドの戻り値の型を列挙型にすることや、その型のパラメーターを持つことはできません
  • あなたのSetDifficultyメソッドはDifficultyだけのパラメーターを持っています-それはパラメーター名またはタイプを意味するのですか?
  • SetDifficultyメソッドがフィールドではなくtypeを設定しようとしています
  • GetDifficultyメソッドがenumを戻り値の型として使用しようとしており、フィールドではなくtypeを返している

基本的に、あなたのenum宣言が何を宣言しているかについて混乱しているようです-それはfieldを宣言しているのではなく、typeを宣言しています(そして、そのタイプの値は)。

私はあなたが欲しいと思う:

// Try not to use nested types unless there's a clear benefit.
public enum Difficulty { Easy, Normal, Hard }

public class Foo
{
    // Declares a property of *type* Difficulty, and with a *name* of Difficulty
    public Difficulty Difficulty { get; set; }
}

コードをC =の代わりにJavaのようにしたい場合は、get/setメソッドを使用できます。

public enum Difficulty { Easy, Normal, Hard }

public class Foo
{
    private Difficulty difficulty;

    public void SetDifficulty(Difficulty value)
    {
        difficulty = value;
    }

    public Difficulty GetDifficulty()
    {
        return difficulty;
    }
}
37
Jon Skeet

実際にDifficultyDifficultyタイプの名前である場合、コードはenumに値を割り当てようとします。代わりに、プロパティとしてゲッターとセッターを使用することをお勧めします。

public enum Difficulty { Easy, Normal, Hard };

private Difficulty _difficulty;

public Difficulty CurrentDifficulty
{
    get { return _difficulty; }
    set { _difficulty = value; }
}

このようにして、特別な条件のセッターに追加のコードを追加できます。これを使用するには、次の手順を実行するだけです。

//set
CurrentDifficulty = Difficulty.Easy;

//get
Difficulty theDifficulty = CurrentDifficulty;
2
Vlad

使用する列挙型は公開する必要があります。また、設定する値を格納するためにその列挙型のインスタンスが必要です。現在、それを列挙型の宣言に設定しています。次に、クラスが保存するものと渡すものに同じ列挙型を使用します。

public enum Difficulty { Easy, Normal, Hard };

public Difficulty { get; set; }
1
cost

enumキーワードを使用して列挙型を指定すると、その列挙型はclassまたはstructのようにタイプとして機能します。

カスタム列挙でプロパティを実装する方法は次のとおりです。

public enum _Difficulty { Easy, Normal, Hard };
public _Difficulty Difficulty { get; set; }
1
DLeh

ここにはいくつかの問題があります:

  1. あなたのenumは非公開なので、SetDifficultyを呼び出してそのenumの値を提供することはできません。実際、コンパイラーはこれを許可しません。
  2. SetDifficultyの引数は単なる型であり、変数名も必要です。また、コンパイラエラー。
  3. 列挙型のクラスレベル変数ではなく、列挙自体の値を取得/設定しようとしている。これもコンパイルされません。

それはのように見えるあなたはこれをしたい:

public enum Difficulty { Easy, Normal, Hard }

public Difficulty DifficultySetting { get; set; }

プロパティの名前をDifficultySettingに変更する必要があることに注意してください。これは、列挙名と競合するためです。あなたはアンダースコアを使用しましたが、これもその問題を解決します。ただし、アンダースコアはプライベートメンバー用であり、コードを使用してこれを使用する場合は常にenumであることが常にわかります。アンダースコアのようなものでパブリックメンバーを装飾すると、名前自体のセマンティクスが混乱します。いずれにせよ、セマンティクスは個人の好みに応じて決定されるため、これらの名前は必要に応じて変更できます。

0
David

あなたがそれらを正しく使用しているとは思えません。これは役立つかもしれません...

private enum Difficulty { Easy, Normal, Hard };
private Diffuculty theDifficulty;

public void SetDifficulty(difficulty d)
{
    theDifficulty = difficulty;
}

public Difficulty GetDifficulty()
{
    return theDifficulty;
}
0
Liamdev631

列挙型はtypeではなくvariableではありません。このような何かがうまくいくでしょう:

public enum Difficulty { Easy, Normal, Hard };

private Difficulty _Difficulty;

public void SetDifficulty(Difficulty difficulty )
{
    _Difficulty = Difficulty;
}

public Difficulty GetDifficulty()
{
    return _Difficulty;
}

プロパティとしてより簡潔に:

private Difficulty Difficulty {get; set;}

パブリックメソッドからアクセスできるようにするには、列挙型をpublicにする必要があることに注意してください。

0
D Stanley