我有两个类型为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)确定匹配的最佳方法是什么?
答案 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
的正确类型参数。