Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where can I find the "clamp" function in .NET?

Tags:

c#

clamp

I would like to clamp a value x to a range [a, b]:

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

This is quite basic. But I do not see a function "clamp" in the class library - at least not in System.Math.

(For the unaware to "clamp" a value is to make sure that it lies between some maximum and minimum values. If it’s greater than the max value, then it’s replaced by the max, etc.)

like image 891
Danvil Avatar asked Apr 21 '10 13:04

Danvil


People also ask

What is a clamp function?

A clamp is a fastening device used to hold or secure objects tightly together to prevent movement or separation through the application of inward pressure.

What does math clamp do Roblox?

math. clamp() restricts a certain number x between a min number and a max number. Alright, thanks very much I understand it now! The function takes x , min and max arguments and it returns the clamped value.


1 Answers

You could write an extension method:

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

Extension methods go in static classes - since this is quite a low-level function, it should probably go in some core namespace in your project. You can then use the method in any code file that contains a using directive for the namespace e.g.

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

.NET Core 2.0

Starting with .NET Core 2.0 System.Math now has a Clamp method that can be used instead:

using System;  int i = Math.Clamp(4, 1, 3); 
like image 168
Lee Avatar answered Oct 06 '22 04:10

Lee