0

クラスからクラスへ情報を転送する最良の方法は何かという質問を受けました。Easy Normalつまり、リストボックスに3つのアイテムがあり、たとえば名前が付けられ、文字列がアイテムとして名前が付けられている戻り文字列を試しましたHard。メソッドをロードした後、彼は私に文字列を返しましたが、これを他のクラスで使用することはできません。最初のクラスで最初に作成することにより、私はこのようにしています:

if(listBox1.SelectedItem.ToString() == "Easy")
{
return "Easy";
}

そして、2番目のクラスで:

if(class.string1() == "Easy")
{
Do something.
}

うまくいきません。皆さん、私を助けてくれませんか? または、この質問は初心者すぎるので、もっと学び、検索する必要があります。

4

2 に答える 2

1

「魔法の文字列」よりも列挙を利用することを好みます。それらはタイプ セーフであり、エラーが発生しにくいです。文字列を列挙型に変換することもできます。これは、問題に適しています。

    public enum DifficultyEnum {
        NULL,
        Easy,
        Medium,
        Hard
    }

    public DifficultyEnum GetDifficulty() {
        var difficulty = DifficultyEnum.NULL;
        var selItem = listBox1.SelectedItem.ToString();
        Enum.TryParse<DifficultyEnum>(selItem, out difficulty);
        return difficulty;           
    }

次に、他のクラスで:

    swtich (classInstance.GetDifficulty()) {
        case Easy:
            break;
        case Medium:
            break;
        case Hard:
            break;

        case NULL: /*Hopefully you don't get here but be defensive and expect that somehow they'll manage to do so =P */
            break;
    }

編集:

これは好みの問題ですが、次のGetDifficulty()ようにプロパティにすることもできます。

    public DifficultyEnum Difficulty {
        get {
            var difficulty = DifficultyEnum.NULL;
            var selItem = listBox1.SelectedItem.ToString();
            Enum.TryParse<DifficultyEnum>(selItem, out difficulty);
            return difficulty;           
        }
    }
于 2012-12-12T01:52:32.150 に答える
0

ここでいくつかの異なる質問をしているようです。

クラス間で情報を転送する方法は、使用しているクラスのタイプと転送するデータのタイプによって異なります。データを共有する最も簡単な方法は、おそらくデータを提供するメソッドを用意することです (戻り値、参照パラメーター、またはデータを含む返されるクラスとして)。

それ以上に、「機能しない」とはどういう意味かについて、より具体的に説明する必要があります。正しく設定されていると仮定すると、動作することがわかります。ただし、文字列を比較するには文字列内の各文字を比較する必要があるため、あまり効率的ではありません。列挙型を定義する方が理にかなっています。

public enum Difficulty
{
    Easy,
    Normal,
    Hard
}

そして、次のように比較します。

if(classInstance.Difficulty == Difficulty.Easy)
{
    // Do something.
}

もちろん、クラスはどのリスト項目が選択されているかを判断し、それを列挙型に変換する必要があります。

于 2012-12-12T01:50:59.410 に答える