我想添加一个属性作为参数。
/// <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;
}
答案 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);
上述方法有些昂贵,因为每次调用它时,都必须确定min
和max
值。您可以将它封装在泛型类型中,并在静态构造函数中初始化这些值,如果这是性能开销会成为问题的那些。