考虑这一点无可否认人为的一般定义:什么“where”子句将使这种通用方法起作用?
private void Foo<T,BASETYPE>(PropertyInfo prop, BASETYPE o1, BASETYPE o2)
{
T value1 = (T) prop.GetValue(o1, null);
T value2 = (T) prop.GetValue(o2, null);
if (value1 != value2)
Console.WriteLine("NOT EQUAL");
}
道具是保证为BASETYPE一个的PropertyInfo。
我在if()语句得到一个编译错误:
Operator '!=' cannot be applied to operands of type 'T' and 'T'
而在“一般情况下,”据我所知,该错误信息是有效的,在这种情况下,我只希望在常规一些标准类型:System.Int64,System.String等全部支持==和!=运算符。
我认为这可以用“where”子句修复,但IComparable和IEqualable不起作用。
有谁知道正确的“where”子句是什么?
弗兰克
这是比代码需要更加具体。 'IEquatable'是你所需要的。 – luqui 2011-03-05 01:30:20
当你真的不需要IComparable的排序功能时,这看起来像是对该类型的不必要的限制。 – 2011-03-05 01:31:44
@Matt @luqui - 两个界面都不限制你的选择吗?我认为你们都同意IEquatable用于比较,IComparable用于排序。如果你的类型实现了一个,而不是另一个,你最终过滤可用的对象,不管是什么? – 2011-03-05 01:35:37