使用运算符<,< =等测试两个对象

时间:2016-02-25 23:04:35

标签: c# if-statement reflection

长话短说,我在C#中拥有一个函数,它拥有两个“对象”(是的类!),可能代表一个原始类型(不包括bool),我想测试它们。 这是一个更好地解释它的代码:

public void Compare(object value1, object value2) {
    if(value1 < value2)
        //do something
    if(value1 > value2)
        // do something else...
 }

但是你可能知道它不可能......有办法吗?

2 个答案:

答案 0 :(得分:3)

您可以通过将两个对象都转换为dynamic来实现此目的。这将导致运行时确定如何比较两个对象而不是编译器。这样,比较函数可以用任何使<>运算符重载的对象(包括基元)执行。

public void Compare(object value1, object value2) {
    if ((dynamic)value1 < (dynamic)value2)
        // do something
    if ((dynamic)value1 > (dynamic)value2)
        // do something else...
}

答案 1 :(得分:3)

您可以将方法设为通用,并添加约束以仅允许IComparable<>类型:

public void Compare<T>(T value1, T value2) where T : IComparable<T>
{
    if (value1.CompareTo(value2) < 0)
    //do something
    if (value1.CompareTo(value2) > 0)
    // do something else...
}

或者您可以使用Comparer.Default.Compare()方法,适用于数字类型:

public static void Compare(object value1, object value2)
{
    if (Comparer.Default.Compare(value1, value2) < 0)
        Console.WriteLine(1);

    if (Comparer.Default.Compare(value1, value2) > 0)
        Console.WriteLine(0);
}

但在这两种情况下,value1value2必须属于同一类型