有一些技巧可以强制通用类只能使用数字类型(参见this)
我正在创建一个库,我最终在许多类定义中编写where T : struct, IComparable ...
。我想创建一个这样的空接口:
public interface INumeric<T>
where T :
struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T> { }
然后在我的泛型类中实现该接口:
public struct StepSize<T> : INumeric<T>
但是当我尝试将数字与
进行比较时if (value.CompareTo(default(T)) <= 0)
我收到错误:
'T'不包含'CompareTo'...
的定义
为什么我收到错误?我已在界面中限制T
的类型,因此T
必须为IComparable
。
编辑:这里有两个班级
namespace NumericalAlgorithms
{
using System;
public interface INumeric<T>
where T :
struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T>
{ }
}
和
namespace NumericalAlgorithms.NumericalMethods
{
using System;
public struct StepSize<T> : INumeric<T>
{
public T Value
{
get;
private set;
}
public StepSize(T value)
: this()
{
if (value.CompareTo(default(T)) <= 0)
throw new Exception("The step size must be greater than zero.");
this.Value = value;
}
}
}
答案 0 :(得分:1)
尝试替换
public struct StepSize<T> : INumeric<T>
通过
public struct StepSize<T> : INumeric<T>
where T :
struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T>