Alex Rivera | Logout

Generic constraint to match numeric types

Asked 2010-07-25T14:38:48.767
104

I'm trying to write an extension method on numeric types to be used in a fluent testing framework I'm building. Basically, I want to do this:

public static ShouldBeGreaterThan<T>(this T actual, T expected, string message)
    where T : int || T: double || etc...

Just where T : struct doesn't do, since that will also match string and bool, and possibly something else I'm forgetting. is there something I can do to match only numeric types? (Specifically types that implement the > and < operators, so I can compare them... If this means I'm matching dates as well, it doesn't really matter - the extension will still do what I expect.)

Edit
Report

1 Answer

11

It is hard to limit to just numerics, since there is nothing common like INumeric to use as the filter. Actually, I suspect the easiest approach here is to not insist on the constraint, and use Comparer<T>.Default.Compare inside the method.

This inbuilt type supports both the generic IComparable<T> and the non-generic IComparable, and supports ref-types, value-types and lifted usage via Nullable<T>.

For full operator usage, look at MiscUtil's Operator class and GreaterThan etc, which may be useful if you really want to use the operator (rather than the interface). It also provides access to the other operators like Add etc.

answered 2010-07-25T15:10:09.477

Your Answer