2017-03-17 78 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值。您可以将其封装在一个通用类型中,并在静态构造函数中初始化这些值,如果这会导致性能开销问题。