0

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ただし、これをデータ型にも使用できるようにしたいと考えています。複数のデータ型を使用できるように関数を変更することは可能ですか?

4

5 に答える 5

5

を使用して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;
}
于 2013-01-28T10:12:39.123 に答える
1

はい、そうです、次のような汎用関数にする必要があります。

T ConstrainValue<T>(T value, T min, T max) where T : IComparable

ただし、さらにいくつかのインターフェイスを追加する必要があると思います

于 2013-01-28T10:11:43.787 に答える
1

を指定する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;
    }
于 2013-01-28T10:17:00.783 に答える
0

.net micro (netduino) は、v4.2 の時点で ジェネリックをサポートしていません。

オブジェクトを引数として取り、作業を行う関数など、別のスキームを使用する必要があります。次に、呼び出し元の関数で戻り値に「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));
        }
于 2013-01-31T16:09:42.147 に答える
0

ジェネリックを使用すると、複数のデータ型を使用できます

T ConstrainValue(T 値、T 最小値、T 最大値) ここで、T : IComparable

于 2013-01-28T10:18:27.443 に答える