2017-03-24 3 views
0

Ich habe Verfahren zum Filtern einer generischen ListeCast Artikeltyp erhielt Parametar

public bool FilterRecords(object obj) 
    { 
     Type ss = obj.GetType(); 
     var item = obj as (obj.GetType()); 
     . 
     . 
     . 
     return false; 
    } 

Objekts obj kann Kunden sein, Ordnung, Artical etc. Problem ist, dass var item = obj as (obj.GetType()); funktioniert nicht. Ich habe einige Optionen ausprobiert, aber mir sind die Ideen ausgegangen. Wie kann ich einen Gegenstand zum Objekttyp machen? Danke im Voraus.

+3

Warum müssen Sie das überhaupt tun? Sobald Sie es in einen Typ umgewandelt haben, der bis zur Laufzeit nicht bekannt ist, was genau würden Sie damit machen? Es ist nicht so, dass du dann Code schreiben kannst, um die Mitglieder des Typs ohne Reflektion aufzurufen. – juharr

+2

Sie können den Zieltyp für Cast-Operationen zur Laufzeit nicht definieren. Sie können jedoch Ihre Methode in eine generische ändern - FilterRecords (object obj) - und dann mit "as" testen, wenn der übergebene Parameter vom Typ T ist. –

Antwort

0

Entschuldigung, ich habe eine Option verpasst. Daher habe ich meine Klasse mit generischen Parameter, habe ich nur

var item = (T)o; 

es funktioniert und es gibt keine Notwendigkeit für Typ ss = obj.GetType();.

+1

Wenn Sie generische Typparameter verwenden möchten, könnten Sie das tun Betrachte: 'public bool FilterRecords (T obj)', dann ist kein Cast notwendig. – vyrp

+0

#vyrp Ich dachte nicht daran, aber funktioniert wie ein Zauber! – Branko

1

Wenn Sie eine begrenzte Anzahl von Optionen haben, könnten Sie so etwas wie:

public bool FilterRecords(object obj) 
{ 
    if(obj is Customer) 
    { 
     var customer = (Customer)obj; 
     //... 
    } 
    else if(obj is Order) 
    { 
     var order = (Order)obj; 
     //... 
    } 
    //... 
} 

Aber dies zeigt wahrscheinlich einen schlechten Design und ein Bedürfnis nach Klasse Vererbung und Polymorphismus.

Verwandte Themen