3

ジェネリック配列で操作を行うメソッドを実装したい C# のクラスがあります。たとえば、汎用配列から最大コンポーネント値を取得したいと考えています。私の場合、数値型 (int、long、double...) だけを検討するだけで十分です。

public class NumericCalculation<T> where T : IComparable<T>
{
    public static T getMax (T[] array)
    {
        T maxValue = default(T);
        if ( array.Length > 0) {
            maxValue = array[0];                 
            for (int i = 0; i < array.Length; i++) {
                if (array[i] > maxValue)
                {
                    maxValue = array[i];
                }
            }            
        }
        return maxValue;
    }
}

しかし、これはエラーを返します:「エラー 2 演算子 '>' は型 'T' および 'T' のオペランドに適用できません」

私がスキップしているインターフェイスなどはありますか? 数値の汎用配列に対してこの汎用メソッドを実行することは可能ですか?

ありがとうございました!

4

3 に答える 3

9

あなたが望むように聞こえます:

return array.DefaultIfEmpty().Max();

ただし、特定の質問に答えるには、配列要素の型を制限しCompareToたインターフェイスのメンバーである を使用できます。IComparable<T>

if(array[i].CompareTo(maxValue) > 0) { ... }

しかし、個人的には、参照をより適切Comparer<T>.Defaultに処理するため、代わりに使用しnullます。プリミティブな数値型 (すべての構造体) のみに関心があるため、これはあなたのケースではそれほど重要ではありません。

if(Comparer<T>.Default.Compare(array[i], maxValue) > 0) { ... }
于 2013-04-03T13:35:07.590 に答える
2

次のコードを使用して、ジェネリック型のオブジェクトを比較します。インターフェイスCompareToで定義されていますIComparable<T>

if (array[i].CompareTo(maxValue) > 0)
{
    maxValue = array[i];
}
于 2013-04-03T13:35:04.397 に答える
2

CompareTo()比較演算子の代わりに使用します。また、Max はすでに Linq で実装されています。

return new[] {1,2,9,4,45}.Max();
于 2013-04-03T13:35:24.500 に答える