Dany Gagnon
Dany Gagnon

Reputation: 112

C# Method Property Param

I want to add a property as a parameter.

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

These methods gets alot repetitive, so i wanted to create a new method that we pass a Property as a parameter. I have no idea what the syntax would be. I've tried adding the object before the param. Here's the method i have so far.

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

Upvotes: 0

Views: 77

Answers (1)

Peter Duniho
Peter Duniho

Reputation: 70652

You cannot pass properties by reference. See How to pass properties by reference in c#? and C# Pass a property by reference.

But usually, you don't need to. And that's the case here. I think your method should look more like this:

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

Then you can call it like:

Dimension  = IncrementEnum(Dimension);

The above method is somewhat costly, because each time you call it, it has to determine the min and max values. You can encapsulate it in a generic type, and initialize those values in the static constructor, if this is something where that performance overhead would be an issue.

Upvotes: 1

Related Questions