使用动态操作比较对象属性

时间:2010-10-05 13:34:21

标签: c#-4.0 compare

我有两个类型为object的变量,需要使用基于枚举的动态操作进行比较:

public enum OperationType
{
    None,
    EqualTo,
    NotEqualTo,
    GreaterThan,
    GreaterThanOrEqualTo,
    LessThan,
    LessThanOrEqualTo          
}

您可以假设变量的基础类型相同,只能是字符串类型或任何其他值类型,但在开发期间是未知的。

我目前有以下内容:

 bool match;
 switch (Operation)
 {
      case OperationType.EqualTo:
           match = Equals(targetValue, valueToMatch);
           break;
      case OperationType.NotEqualTo:
           match = Equals(targetValue, valueToMatch) == false;
           break;
      case OperationType.GreaterThan:
           //??
           break;
      case OperationType.GreaterThanOrEqualTo:
           //??
           break;          
      case OperationType.LessThan:
           //??
           break;
      case OperationType.LessThanOrEqualTo:
           //??
           break;          
      default:
           throw new ArgumentOutOfRangeException();
 }

在运行时(C#4.0)确定匹配的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

你是否在通用方法中有这个,或者你可以放在通用方法中吗?如果是这样,则相对容易:使用EqualityComparer<T>.Default进行相等比较,使用Comparer<T>.Default进行大于/小于比较(使用< 0<= 0进行小于vs比较例如,小于或等于。

如果您无法以通用方式直接调用它,可以使用C#4的动态类型为您执行此操作:

private static bool CompareImpl<T>(T value1, T value2, OperationType operation)
{
    // Stuff using generics
}

public static bool Compare(dynamic value1, dynamic value2,
                           OperationType operation)
{
    return CompareImpl(value1, value2, operation);
}

在执行时,这将计算出用于CompareImpl的正确类型参数。