2016-06-17 8 views
1

Ich versuche, ein Verfahren zu schreiben:C# Linq Datacontext Tabelle: Polymorph warf

public Table<ParentType> GetTableFromContext() { 
    //return a table of type Table<ChildType> 
} 

Ja, ich kann dies mit Generics lösen:

public Table<T> GetTableFromContext<T>() where T : ParentType { 
    //return a table of type Table<T> 
} 

Aber ich würde es vorziehen, nicht zu tun. (Ich müsste dann Generika in allen Basisklassen verwenden)
Gibt es eine Lösung, um auf eine Tabelle mit einem weniger spezifischen Typ zu verweisen?

+0

Dynamisch, Objekt? – NEER

+0

Ja, Sie können eine 'Tabelle ' von der ersten Methode zurückgeben, aber wie würden Sie entscheiden, welcher Subtyp zurückgegeben werden soll? –

+0

@GertArnold Immer der gleiche Untertyp. Ich habe eine partielle Klasse basierend auf den dbml-Klassen deklariert und für alle eine gemeinsame Basisklasse festgelegt. Jetzt möchte ich die Tabelle mit dieser Basisklasse unabhängig vom Elterntyp erhalten. –

Antwort

1

Sie können dieses Problem mit Hilfe von Kovariation lösen, aber in diesem Fall sollten Sie int verwenden erface ITable statt Klasse Table als Rückgabetyp Ihrer Methode:

public interface ITable<out T> 
{} 

public class Table<T> : ITable<T> 
{}  

public ITable<ParentType> GetTableFromContext() { 
    return new Table<ChildType>(); 
} 
1

Soweit ich verstehe, ist Ihr Problem "Ich möchte eine von wenigen Arten zurückgeben, aber ich will keine komplizierte Vererbung". Ist dies der Fall, ist die Lösung eine Markierungsschnittstelle

public interface ITable {} 

Welche (ohne Interface-Mitglieder ist es sehr einfach) umgesetzt werden können, indem Sie Ihre Rückgabetypen

public class ChildType1 : ITable 

Zusätzlich kann die Schnittstelle dienen zur Durchsetzung eine gemeinsame Struktur auf Ihren Entitäten, wenn sie haben (das häufigste Beispiel ist wahrscheinlich eine Id-Eigenschaft)

Verwandte Themen