以下代码无法编译
... cannot convert T to int bla bla bla
bool IsEqual<T>(this T a, T b, T offset)
{
a = Math.Abs(a);
b = Math.Abs(b);
if (Math.Abs(a - b) < offset)
return true;
else
return false;
}
如何在我自己的泛型方法中使用 Math.Abs
?
如果 .Net 有类或接口(interface),比如 Java 中的Number,你完全可以放一些东西喜欢
// Doesn't compile; just the idea
bool IsEqual<T>(this T a, T b, T offset)
where T: Number { // <- T can be any integer or floating point type
a = Math.Abs(a);
....
不幸的是,.Net 不提供这样的接口(interface),因此您必须实现 IsEqual
的重载版本:
bool IsEqual(this Double a, Double b, Double offset) {
return (Math.Abs(a - b) < offset);
}
bool IsEqual(this Single a, Single b, Single offset) {
return (Math.Abs(a - b) < offset);
}
bool IsEqual(this long a, long b, long offset) {
return (Math.Abs(a - b) < offset);
}
bool IsEqual(this int a, int b, int offset) {
return (Math.Abs(a - b) < offset);
}
...