5

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?

Otiel
  • 18,404
  • 16
  • 78
  • 126
ChandlerPelhams
  • 1,648
  • 4
  • 38
  • 56

3 Answers3

7

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.

Marcelo Cantos
  • 181,030
  • 38
  • 327
  • 365
2

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.

Marcin Deptuła
  • 11,789
  • 2
  • 33
  • 41
1

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));
driis
  • 161,458
  • 45
  • 265
  • 341