umgewandelt. Ich habe eine Vorlage erstellt, die den Index des Maximalwerts in einem Array zurückgibt. Es funktioniert, aber nur wenn ich eine komisch besetzte Liste übergebe."Double" wird nicht als "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;
}
Nun, es zu benutzen:
List<IComparable<Double>> arr = new List<IComparable<Double>>(); // THIS WORKS
List<Double> arr = new List<Double>(); // THIS DOESN'T
Die spätere Liste, die ist, was ich verwenden möchte, gibt dieser Compiler-Fehler:
cannot convert from 'System.Collections.Generic.List<double>' to 'System.Collections.Generic.IEnumerable<System.IComparable<double>>'
Wie kann das sein? "Double" ist ein IComparable; genommen aus seiner Definition:
public struct Double : IComparable, IFormattable, IConvertible, IComparable<Double>, IEquatable<Double>
@NuriTasdemir Ja, das habe ich gesehen, deshalb habe ich das als Option am Ende gelassen. In OPs Post gab es nichts, was darauf hinwies, dass es sein musste. Da sie anscheinend keine generischen Einschränkungen kennen, ging ich auch davon aus, dass sie über Erweiterungsmethoden nicht Bescheid wussten. – Kyle
Liebe das für (int i = 1; e.MoveNext(); ++ i) Schleife. Ordentlich. –