Где я могу найти функцию “зажима” в.NET?

Я хотел бы зафиксировать значение x к диапазону [a, b]:

x = (x < a) ? a : ((x > b) ? b : x);

Это является довольно основным. Но я не вижу функциональный "зажим" в библиотеке классов - по крайней мере, не в System.Math.

(Для не зная, чтобы "зафиксировать" значение должен удостовериться, что оно находится между некоторыми максимальными и минимальными значениями. Если это больше, чем макс. значение, то это заменяется макс., и т.д.),

84
задан Amro 18 August 2013 в 08:46
поделиться

4 ответа

Вы можете написать метод расширения:

public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
{
    if (val.CompareTo(min) < 0) return min;
    else if(val.CompareTo(max) > 0) return max;
    else return val;
}

РЕДАКТИРОВАТЬ: методы расширения входят в статические классы - поскольку это довольно низкоуровневая функция, вероятно, следует войдите в какое-то основное пространство имен в своем проекте. Затем вы можете использовать этот метод в любом файле кода, который содержит директиву using для пространства имен, например.

using Core.ExtensionMethods

int i = 4.Clamp(1, 3);

.NET Core 2.0

Начиная с .NET Core 2.0 System.Math теперь имеет метод Clamp , который можно использовать вместо него:

using System;

int i = Math.Clamp(4, 1, 3);
122
ответ дан 24 November 2019 в 08:30
поделиться

Его нет, но сделать его несложно. Я нашел один здесь: зажим

Это:

public static T Clamp<T>(T value, T max, T min)
    where T : System.IComparable<T> {
        T result = value;
        if (value.CompareTo(max) > 0)
            result = max;
        if (value.CompareTo(min) < 0)
            result = min;
        return result;
    }

И его можно использовать как:

int i = Clamp(12, 10, 0); -> i == 10
double d = Clamp(4.5, 10.0, 0.0); -> d == 4.5
13
ответ дан 24 November 2019 в 08:30
поделиться

В пространстве имен System.Math его нет

http://msdn.microsoft.com/en-us/library/system. math_members.aspx

Существует класс MathHelper, доступный для игровой студии XNA, если это именно то, что вы делаете:

http://msdn.microsoft.com/en-us/library/bb197892 (v = XNAGameStudio.31) .aspx

10
ответ дан 24 November 2019 в 08:30
поделиться

Попробуйте:

public static int Clamp(int value, int min, int max)  
{  
    return (value < min) ? min : (value > max) ? max : value;  
}
25
ответ дан 24 November 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: