0

従業員の賃金の配列が平均、最大、最小の順にあるとします。

int[] wages = {0, 0, Int32.MaxValue};

上記のコードは初期化されているため、最大値を見つけると 0 と比較でき、既存の値を超えるものはそれを打ち負かして置き換えます。したがって、ここでは 0 で問題ありません。分を見ると、それを 0 に設定すると問題が発生します。賃金 (すべて 0 より大きい) を比較し、最低賃金を最低賃金に置き換えることは不可能です。代わりに、すべての賃金がこの値を下回ることが保証されているため、Int32.MaxValue を使用しました。

これは一例にすぎませんが、リセットして配列を初期化された内容に戻すと便利な例が他にもあります。C#でこれの構文はありますか?

編集: @Shannon Holsinger は次のような回答を見つけました: wages = new int[] {0, 0, Int32.MaxValue};

4

1 に答える 1

0

短い答えは、これを行う組み込みの方法がないということです。フレームワークは、配列の初期状態を自動的に追跡するのではなく、現在の状態のみを追跡するため、元の状態に再初期化する方法を知る方法がありません。ただし、手動で行うこともできます。これに対する正確なアプローチは、配列が最初に初期化されたものによって異なります。

        // Array will obviously contain {1, 2, 3}
        int[] someRandomArray = { 1, 2, 3 };

        // Won't compile
        someRandomArray = { 1, 2, 3 };

        // We can build a completely new array with the initial values
        someRandomArray = new int[] { 1, 2, 3 };

        // We could also write a generic extension method to restore everything to its default value
        someRandomArray.ResetArray();

        // Will be an array of length 3 where all values are 0 (the default value for the int type)
        someRandomArray = new int[3];

ResetArray 拡張メソッドは以下のとおりです。

// The <T> is to make T a generic type
public static void ResetArray<T>(this T[] array)
    {
        for (int i = 0; i < array.Length; i++)
        {
            // default(T) will return the default value for whatever type T is
            // For example, if T is an int, default(T) would return 0
            array[i] = default(T);
        }
    }
于 2016-09-14T17:23:31.673 に答える