Ein Ding, das ich bei C# schon immer und wieder vermisst habe (zumindest Damals[TM]) ist ein LimitTo.
Wie oft kommt es vor, dass man Parameterwerte oder irgendwelche Eingaben auf eine gewisse Spanne eingrenzen will. Daher habe ich mir schon lange mal die Klasse LimitOperations geschrieben, welche solche LimitTo-Erweiterungsmethoden enthält.
Aufgebaut auf IComparable klappt das mit jedem Datentyp.
Die Benutzung ist erwartungsgemäß eine neue Zuweisung. Der originäre Wert wird nicht angerührt. Geht also bestens mit Werttypen.
lvalue = lvalue.LimitTo(1,60);
Hier mal die von mir empfohlene Klasse. Ganz klassisch ohne UnitTests (uups)
Code
using System;
namespace WpfBib.Extensions
{
/// <summary>
/// Klasse stellt Erweiterungsmethoden bereit um an ordinalen Typen
/// Limits einzuhalten. Also "lass das nicht größer werden als..."
/// </summary>
/// <example>
/// int i = 43, j=i.LimitTo(2,44);
/// </example>
public static class LimitOperations
{
public static T LimitTo<T>(this T inValue, T lowerLimit, T upperLimit) where T : IComparable
{
if (inValue.CompareTo(lowerLimit) < 0)
return lowerLimit;
if (inValue.CompareTo(upperLimit) > 0)
return upperLimit;
return inValue;
}
public static T LimitTo<T>(this T inValue, T upperLimit) where T : IComparable
{
if (inValue.CompareTo(upperLimit) > 0)
return upperLimit;
return inValue;
}
public static double LimitTo_NoNan(this double inValue, double upperLimit)
{
if (double.IsNaN(upperLimit))
return inValue;
if (inValue.CompareTo(upperLimit) > 0)
return upperLimit;
return inValue;
}
}
}