[英]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.