Bedingungen bei Generics

Also ich hab da so eine generische Methode:

private T getItem<T>(LinkedList<T> items, GetModes mode) where T : IKoordinate
{
    return null; //Fehler!
}

Jedenfalls hatte ich das Problem, dass sie im Fehlerfall auch null zurückgeben kann, was vom Compiler aber angemeckert wurde.

Durch Marco war die Lösung schnell gefunden:

private T getItem<T>(LinkedList<T> items, GetModes mode) where T : class, IKoordinate
{
    return null; //OK!
}

Mit der zusätzlichen Bedingung sagt man dem Compiler, dass T eine Klasse sein muss. Eine Klasse darf null sein und damit ist alles in Butter. Nach meinem Verständnis impliziert die Bedingung, dass T das Interface IKoordinate bieten muss, auch, dass T eine Klasse ist, aber vielleicht hab ich auch einen anderen Punkt nicht im “Blickfeld”. Jedenfalls geht der zweite Quellcode!

Danke Marco!

Noch ein kleines Update: Natürlich würde ich für einen Fehlerfall eine Exception werfen und nicht null zurückgeben.

This entry was posted in .net. Bookmark the permalink.

2 Responses to Bedingungen bei Generics

  1. marco says:

    Kurzer Erklärung zum Grund: Auch ein struct kann ein Interface implementieren. Ein struct ist aber kein Referenz Typ, weshalb es nicht NULL sein kann. (z.B. Color oder Point sind structs -> Value- und keine Referenztypen)

  2. Fabse says:

    aha, dann macht das ganze natürlich sinn. Danke für die info!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>