我有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的正确类型参数.