我正在定义一个通用类型:
public class Point<T> where T : IConvertible, IComparable
我真正想要做的是将T限制为数字类型(其中之一为int或float)。在CLR中没有INumeric。是否有可以在此处使用的接口或接口集合,以将类型约束为一个装箱的数字类?
我正在定义一个通用类型:
public class Point<T> where T : IConvertible, IComparable
我真正想要做的是将T限制为数字类型(其中之一为int或float)。在CLR中没有INumeric。是否有可以在此处使用的接口或接口集合,以将类型约束为一个装箱的数字类?
where T : struct, IConvertible, IComparable<T>
结构体约束防止使用字符串...
然而,这仍允许使用符合适当约束的任何用户定义的值类型。
where T: struct
会将其限制为值类型。
一种不太舒适的方式是在构造函数中检查有效类型并抛出异常。它可以工作,但不是“编译器安全”的,并产生运行时错误。 :-(
不,你不能这样做。
你可以选择在T:struct,IConvertible,IFormattable,IComparable
中限制所有可平铺的数字类型和枚举类型,但即使你进行了限制,你仍然无法在T
上使用运算符,因为这些运算符都是静态的。
例如:
point.X-point.Y
由于泛型不知道静态成员,因此会违法。