c#-4.0 – 使用动态操作比较对象属性

我有2个类型对象的变量需要使用基于枚举的动态操作进行比较:

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)确定匹配的最佳方法是什么?

最佳答案 你有一个通用的方法,或者你可以把它放在一个通用的方法?如果是这样,则相对容易:使用EqualityComparer< T> .Default进行相等比较,并使用Comparer< T> .Default进行大于/小于比较(使用< 0或< = 0表示小于和小于 – 例如,等于或等于). 如果你不能以通用的方式直接调用它,你可以使用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的正确类型参数.

点赞