长话短说,我在C#中拥有一个函数,它拥有两个“对象”(是的类!),可能代表一个原始类型(不包括bool),我想测试它们。 这是一个更好地解释它的代码:
public void Compare(object value1, object value2) {
if(value1 < value2)
//do something
if(value1 > value2)
// do something else...
}
但是你可能知道它不可能......有办法吗?
答案 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);
}
但在这两种情况下,value1
和value2
必须属于同一类型