配列内の最大値のインデックスを返すテンプレートを作成しました。それは動作しますが、私が奇妙なキャストリストを渡す場合のみです。"Double"は "IComparable <Double>"としてキャストされません
今static public int FindMaxIndex<T>(IEnumerable<IComparable<T>> arr)
{
IEnumerator<IComparable<T>> it = arr.GetEnumerator();
if (!it.MoveNext()) return -1;
int index = 1, maxIndex = 0;
IComparable<T> max = it.Current;
while (it.MoveNext())
{
if (max.CompareTo((T)(it.Current)) < 0)
{
maxIndex = index;
max = it.Current;
}
++index;
}
return maxIndex;
}
それを使用する:
List<IComparable<Double>> arr = new List<IComparable<Double>>(); // THIS WORKS
List<Double> arr = new List<Double>(); // THIS DOESN'T
私が使用したいものです後のリストを、このコンパイラエラーを与える:
cannot convert from 'System.Collections.Generic.List<double>' to 'System.Collections.Generic.IEnumerable<System.IComparable<double>>'
どのようにこれをすることができますか? "Double"はIComparableです。その定義から取ら:
public struct Double : IComparable, IFormattable, IConvertible, IComparable<Double>, IEquatable<Double>
@NuriTasdemirはい、私はそれを見ました。そのため、最後にオプションとして残しました。 OPのポストには、それがなければならないことを示す何もなかった。彼らはジェネリック制約について知っているようには見えないので、私は彼らが拡張方法について知らなかったとも仮定しました。 – Kyle
for(int i = 1; e.MoveNext(); ++ i)ループが大好きです。きちんとした –