[英]Multiple data type input in C# function
我正在从Arduino(c语言)切换到Netduino(c#语言)。
在我的arduino程序中,我具有以下功能(内置):
我想将其转换为C#。 我有以下代码:
int ConstrainValue(int value, int min, int max)
{
int Value = value;
int Min = min;
int Max = max;
if (Value >= Max)
{
Value = Max;
return Value;
}
else if (Value <= Max)
{
Value = Min;
return Value;
}
return Value;
}
但是,我也希望能够将其用于double
数据类型。 是否可以修改函数以便可以使用多种数据类型?
使用IComparable
。
static T ConstrainValue<T>(T value, T min, T max) where T : IComparable
{
if (value.CompareTo(max) > 0)
return max;
else if (value.CompareTo(min) < 0)
return min;
return value;
}
是的,您需要将其设为通用函数,如下所示:
T ConstrainValue<T>(T value, T min, T max) where T : IComparable
我认为您需要添加更多接口
通过指定struct
,在调用该方法时不会得到装箱,但是通过使用IComparable
,在调用CompareTo
时仍会得到装箱,因为该接口方法带有object
。
因此,使用IComparable<T>
,我很确定现在没有拳击了:
private static T ConstrainValue<T>(T value, T min, T max)
where T : struct, IComparable<T>
{
if (value.CompareTo(max) > 0)
{
return max;
}
if (value.CompareTo(min) < 0)
{
return min;
}
return value;
}
通过使用泛型,您可以使用多种数据类型
T ConstrainValue(T值,T min,T max)其中T:IComparable
从v4.2开始,.net micro(netduino)不支持泛型 。
您将不得不使用另一种方案,例如将对象作为参数然后执行工作的函数。 然后,您必须在调用函数的返回值上使用“ as”或强制转换:
object ConstrainValueInt(object value, object min, object max)
{
/* this could still get you in trouble with bool type */
if (value.GetType().isValueType && min.GetType().isValueType && max.GetType().isValueType )
return ( (value >= max)? max : ((value <= min)? min : value));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.