2017-01-09 1 views
0

Wie kann ich den Code unten mit is TWie Klassen mit generischen Typen in C# vergleichen

public IList<IElement> OfClass(Type type) 
{ 
    return list 
     .Where(o => o.GetType() == type) 
     .ToList(); 
} 

so etwas schreiben:

public IList<IEtabsElement> OfClass(....) 
{ 
    return list 
     .Where(o => o is ...) 
     .ToList(); 
} 

UPDATE Das ist meine Lösung ist, so weit. Ist es okay?

public IList<IElement> OfClass<T>() 
{ 
    return list 
     .Where(o => o is T) 
     .ToList(); 
} 
+0

Was ist 'list' in 'Rückkehrliste'? Soll das ein Parameter sein, der an Ihre Funktion übergeben wird? –

+3

Nun, Sie würden es brauchen, um eine generische Methode zu sein ... aber vielleicht suchen Sie nach der existierenden 'OfType' Methode? –

+0

@JasonBoyd-Liste ist ein Feld in der Klasse definiert wie folgt: private IList Liste; – Vahid

Antwort

2

Sie können eine generische Methode erstellen, statt:

public IList<T> OfClass<T>() 
{ 
    return list 
     .Where(o => o.GetType() == typeof(T)) 
     .ToList(); 
} 

Dies würde funktionieren, aber ist das gleiche wie das bestehende Verfahren OfType, zum Beispiel:

var myvehicles = new List<Vehicle> { new Car(), new Bike()}; 
var mycars = myvehicles.OfType<Car>(); 
+1

'o.GetType() == typeof (T)' ist nicht dasselbe wie 'o ist T'. Nehmen wir zum Beispiel an, dass "T" eine Schnittstelle oder eine abstrakte Klasse ist. Dann kann 'GetType() 'niemals' typeof (T) 'geben; Der tatsächliche (Laufzeit-) Typ wird etwas Konkretes sein. Aber es ist immer noch sinnvoll zu fragen, ob "o ist T". ___ Edit: ___ In deinem Beispiel, wenn es ein 'RacingCar' gibt (welches" ist "ein" Auto ", aber dessen Typ nicht genau" Car "ist) in der Liste, was willst du? –

+0

@Kenneth Danke Kenneth, deine Antwort und Jeppes Kommentar zeigte mir die richtige Richtung. – Vahid

+0

@JeppeStigNielsen Ich habe die ursprüngliche Frage mit einer Antwort aktualisiert. ist das was du meintest? – Vahid

Verwandte Themen