Hier ist das Problem, ich muss Methode schreiben, die generischen Typ ist, und kann nur von Typen verwendet werden, die IComparer Schnittstelle behandeln, zusätzlich meine Methode müssen T-Array und IComparer als Parameter nehmen . Die Methode sollte den maximalen Wert aus den von IComparer angegebenen Kriterien zurückgeben. Ich habe eine Testklasse mit der grundlegenden Implementierung von IComparable und IComparer geschrieben (Code unten).IComparer <T> und generische Art Methode Problem
public class TestClass : IComparable<TestClass>
{
public int CompareTo(TestClass other)
{
throw new NotImplementedException();
}
}
public class Nested : IComparer<TestClass>
{
IComparer<TestClass> criteria;
public int Compare(TestClass x, TestClass y)
{
throw new NotImplementedException();
}
}
static void Main(string[] args)
{
Nested x = new Nested();
TestClass[] tab = { new TestClass() };
Tools.ElementsMax<TestClass>(tab, x);
}
Wenn ich versuche Methode i diesen Fehler zu testen:
Blockquote Error CS0311 The type 'x.TestClass' cannot be used as type parameter 'T' in the generic type or method 'Tools.ElementsMax(T[], IComparer)'. There is no implicit reference conversion from 'x.TestClass' to 'System.Collections.Generic.IComparer'.
Ich verstehe nicht, warum genau ich diesen Fehler bin immer, ich war wirklich sicher, dass es auf diese Weise funktionieren soll , aber überraschenderweise nicht.
'Tools.ElementsMax' ist, wo es Fehler gibt, aber Sie haben diesen Code nicht enthalten. – Yatrix
Ah, ja ich habe es nicht aus Versehen aufgenommen, tut mir leid. Hier ist die Methode. 'public static T ElementsMax (T [] arrayParameter, IComparer Kriterien) wobei T: IComparer { return arrayParameter [1]; } –
banneh
@Banneh Ich vermutete es richtig - Ihre Methode hat eine falsche Einschränkung in seiner Unterschrift :-) – dasblinkenlight