C#方法属性参数

时间:2017-03-17 01:03:50

标签: c# .net visual-studio parameters properties

我想添加一个属性作为参数。

    /// <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会是什么。 我已尝试在object之前添加param。这是我到目前为止的方法。

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

1 个答案:

答案 0 :(得分: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值。您可以将它封装在泛型类型中,并在静态构造函数中初始化这些值,如果这是性能开销会成为问题的那些。