Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object.CompareTo(Object) for unknown data type

I am trying to compare objects in an object[] that are of a single type (unknown at runtime). They are of System.string, int, decimal, Datetime, or bool types.

Is there a way to compare two of these objects to determine if one is greater or less than another without having to cast them into their appropriate type first?

like image 684
ChandlerPelhams Avatar asked Nov 22 '11 20:11

ChandlerPelhams


3 Answers

The types in question all implement IComparable, so, if being able to compare elements is an intrinsic requirement of your array, you could declare it as an IComparable[] instead.

like image 117
Marcelo Cantos Avatar answered Oct 21 '22 19:10

Marcelo Cantos


All of those types implement IComparable interface, so you can cast your objects to IComparable (or just keep an IComparable[] array instead of object[]). Then you can use CompareTo(object x) method.

like image 26
Marcin Deptuła Avatar answered Oct 21 '22 17:10

Marcin Deptuła


All of the types you mention implements IComparable, so you can use IComparable.CompareTo. As an example:

object[] ints = new object[] { 2, 1, 3};
object n = 2;
var compareResults = ints.OfType<IComparable>().Select(c => c.CompareTo(n));
like image 1
driis Avatar answered Oct 21 '22 17:10

driis