2017-03-14 15 views
1

Ich habe folgende Klasse:kann nicht implizit Typ ‚T‘ ‚Objekt‘ konvertieren

public class TestClass 
{ 
    public IEnumerable<Expression<Func<object, object>>> TestField { get; set; } 
} 

Ich versuchte, ein Testclass-Objekt wie folgt zu erstellen:

new TestClass 
{ 
    TestField = new Expression<Func<OtherClass, object>>[] 
    { 
     otherClass => otherClass.FieldX, 
     otherClass => otherClass.FieldY 
    } 
} 

Aber ich bekomme folgende IntelliSense-Fehler: kann nicht implizit konvertiert Typ ‚Other‘ auf ‚Objekt‘

Wie implementiere ich das mit meinemhaltenDefinition generische, so kann ich ein TestClass Objekt mit z. OtherClass, AnotherClass oder eine andere Klasse?

+2

Warum gehst du nicht machen 'TestClass' generisch? –

+1

'neuer Ausdruck > [] {otherClass => ((OtherClass) otherClass) .FieldX, otherClass => ((OtherClass) otherClass) .FieldY}' – PetSerAl

+1

"Aber ich bekomme folgenden IntelliSense-Fehler: Kann nicht implizit Typ 'OtherClass' in 'Objekt' umwandeln "- Wirklich? Das klingt nicht richtig. Sind Sie sicher, dass Sie keine längere Fehlermeldung erhalten? – hvd

Antwort

0

Gefällt mir?

2

Sie können eine generische Klasse eines Typs nicht in eine generische Klasse eines abgeleiteten Typs umwandeln. Nur weil der generische Typ der Klassen durch Vererbung verbunden ist, heißt das nicht, dass die Klasse selbst ist. Sie können beispielsweise List<Apple> nicht in List<Fruit> umwandeln, da diese beiden Listen, soweit das Programm betroffen ist, völlig unterschiedliche Klassen sind.

In Ihrem Fall können Sie Ihre Generika Problem lösen, indem TestClass macht sich generic:

public class TestClass<T> 
{ 
    public IEnumerable<Expression<Func<T, object>>> TestField { get; set; } 
} 

Dann können Sie eine Instanz von TestClass wie so erstellen:

new TestClass<OtherClass> 
{ 
    TestField = new Expression<Func<OtherClass, object>>[] 
    { 
     otherClass => otherClass.FieldX, 
     otherClass => otherClass.FieldY 
    } 
} 
Verwandte Themen