2017-03-17 71 views
0

我想添加一個屬性作爲參數。C#方法屬性參數

/// <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; 
    } 

這些方法得到了很多重複的,所以我想創造我們傳遞一個Property作爲parameter的新方法。我不知道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); 

上述方法有些昂貴,因爲每次你怎麼稱呼它的時候,它有確定minmax值。您可以將其封裝在一個通用類型中,並在靜態構造函數中初始化這些值,如果這會導致性能開銷問題。