Как сравнить два значения типа System.Object по значению? - PullRequest
0 голосов
/ 21 января 2012

Как сравнить два значения типа System.Object по значению?

Как сделать следующее:

void Validate(Type t, Object obj)//t is always a Basic type like System.Int32, System.DateTime, System.String, etc.
{
    Object value = Convert.ChangeType(obj, t);
    Object minValue = Convert.ChangeType(this.MinValue.Value, t);
    Object maxValue = Convert.ChangeType(this.MaxValue.Value, t);

    if (!(minValue >= value && value >= maxValue))
    {
        throw new Exception(".....err...message.....");
    }
}

Ответы [ 4 ]

1 голос
/ 21 января 2012

Основные типы значений, такие как Int32 агрегат IComparable:

IComparable value    = (IComparable) Convert.ChangeType (obj, t) ;
IComparable minValue = ...
IComparable maxValue = ...

if (minValue.CompareTo (value) > 0 || maxValue.CompareTo (value) < 0)
    throw ...
0 голосов
/ 27 июня 2014

Вместо объекта / переменной используйте динамический ...

dynamic minValue = Convert.ChangeType(this.MinValue.Value, t);
dynamic maxValue = Convert.ChangeType(this.MaxValue.Value, t);
0 голосов
/ 21 января 2012

Вы можете использовать тот факт, что все перечисленные вами типы реализуют интерфейс IComparable .

0 голосов
/ 21 января 2012

System.Object, так как не получил правильных значений, которые можно сравнивать.конечно, вы можете проверить значения, возвращаемые функцией, которую имеет каждый объект.

...