2017-03-17 4 views
0

プロパティとしてパラメータを追加したいとします。C#MethodプロパティParam

/// <summary> 
    ///  Permet de passer à la prochaine valeur de la <see 
    cref="Dimension" />. 
    /// </summary> 
    public void DimensionSuivante() 
    { 
     if (Dimension == enuDimension.Petite) 
      Dimension = enuDimension.Maximale; 
     else 
      Dimension += 1; 
    } 

    /// <summary> 
    ///  Permet de passer à la prochaine valeur de la <see cref="Qualite" 
    />. 
    /// </summary> 
    public void QualiteSuivante() 
    { 
     if (Qualite == enuQualite.Faible) 
      Qualite = enuQualite.Excellente; 
     else 
      Qualite += 1; 
    } 

    /// <summary> 
    ///  Permet de passer à la prochaine valeur de la <see 
    cref="Sensibilite" />. 
    /// </summary> 
    public void SensibiliteSuivante() 
    { 
     if (Sensibilite == enuSensibilite.ISO_800) 
      Sensibilite = enuSensibilite.ISO_64; 
     else 
      Sensibilite += 1; 
    } 

これらの方法はたくさん繰り返し取得しますので、私たちはparameterとしてPropertyを渡す新しいメソッドを作成したいです。私はsyntaxが何であるか分かりません。 paramの前にobjectを追加しようとしました。ここに私が今まで持っている方法があります。

private void GetPropertyNext(PropertyName) 
    { 
     if (PropertyName == FirstOfEnu) 
      PropertyName = LastOfEnu; 
     else 
      PropertyName += 1; 
    } 
+0

最後のコードでは、PropertyNameの後に変数名を定義する必要があります。 – Adrian

答えて

1

参照によってプロパティを渡すことはできません。 How to pass properties by reference in c#?およびC# Pass a property by referenceを参照してください。

通常、あなたはそうする必要はありません。それがここに当てはまります。

static T IncrementEnum<T>(T value) 
{ 
    int[] values = Enum.GetValues(typeof(T)).Cast<int>().ToArray(); 
    int i = (int)(object)value, 
     min = values.Min(), 
     max = values.Max(); 

    return (T)(object)(i == max ? min : i + 1); 
} 

次にあなたが好きそれを呼び出すことができます:

Dimension = IncrementEnum(Dimension); 

あなたはそれを呼び出すたびに、それを決定しなければならないので、上記の方法は、多少高価である私はあなたの方法は、より多くのように、これを見てすべきだと思いますminおよびmaxの値。ジェネリック型でカプセル化し、そのパフォーマンスオーバーヘッドが問題になる場合は、静的コンストラクターでこれらの値を初期化することができます。