考虑这个微不足道的函数:
public static bool IsPositive(IComparable<int> value)
{
return value.CompareTo(0) > 0;
}
现在,如果我将一个传递int
给这个方法,它就会被装箱。因此,将上述方法定义如下不是更好吗?
public static bool IsPositive<T>(T value) where T : IComparable<int>
{
return value.CompareTo(0) > 0;
}
以这种方式使用通用约束,我可以实现与上面的代码完全相同的功能,另外还有一个好处是不需要装箱(因为调用IsPositive<int>
接受 type 的参数int
)。
上面的示例代码显然毫无意义。但我更广泛的问题是:以后一种方式定义方法(使用通用约束而不是具有某种接口类型的参数)以避免潜在的值类型装箱不是总是有意义的吗?
我怀疑答案很可能是“是的,但它需要更多的输入,并且在许多情况下遇到值类型的可能性很小,例如当方法接受 some 时IEnumerable<T>
”。但我想知道这些方法之间是否存在更大的差异,而这些方法目前正在逃避我。