2009-07-17 17 views
1

meine Methode:C# kann nicht implizit Typ T umwandeln T eingeben

public TableFilled<TKey, TRow> getTera() 
    { 

     Func<TablesFilled<TKey,TRow>> _getTera=new Func<TablesFilled<TKey,TRow>>(
     ()=>{return (TablesFilled<TKey,TRow>) chGetTera();}); 

     //Above does not compile says: Cannot convert type 
     //'AcapsVerify.FunctionalTables.TableFilled<TKey,TRow>' to 
     //'AcapsVerify.FunctionalTables.TablesFilled<TKey,TRow>' 
     // the line below has the same blue underline error. 
     return _getTera.TimeAndReport("Finished Teradata",OutputIfListener); 

     // this works fine 
     return chGetTera; 
    } 

Die statische Methode ruft

public static T TimeAndReport<T>(this Func<T> timedFunc, String reportLead, Action<String> reporterAction) 
    { 
     T result; 
     var s = new System.Diagnostics.Stopwatch(); 
     s.Start(); 
     result = timedFunc(); 
     s.Stop(); 
     reporterAction(reportLead + " in " + s.WholePartOnly()); 
     return result; 
    } 

Rückkehr Klassendefinition:

public class TableFilled<TKey,TRow> where TRow: STeraRow<TKey> 
+0

Um dies zu in mehr Kontext zu setzen, ich mache ein Funktionstisch Vergleichsprogramm, wo man die Tabelle Master ist und eine ist die Kopie . Funktionell unterscheidet sich eine gefüllte Tabelle von der Klasse, die sie erstellt. Ich möchte, dass alle Tischfabriken berichten, wie lange sie gedauert haben, wenn jemand zuhört. – Maslow

Antwort

3

Was ist der Unterschied zwischen einem TableFilled-Typ und einem TablesFilled-Typ? Entweder haben Sie einen Tippfehler in Ihrem Rückgabetyp oder Sie haben keine implizite Konvertierung zwischen den beiden Typen.

+0

Entschuldigung, sie haben die gleiche Signatur, ich habe es bearbeitet, damit TableFilled zeigt – Maslow

+1

Aber Sie können nicht von einem TablesFille zu einem TableFille konvertieren, selbst wenn sie die gleiche Definition haben - das ist das Problem. Müssen Sie * wirklich * zwei Klassennamen haben, die sich nur durch einen Buchstaben in der Mitte unterscheiden? –

+0

heilige Kuh ... yup das war das Problem, irgendwelche Vorschläge für einen besseren Namen für das gefüllte Paar von Tabellen, die zum Vergleich bereit ist? – Maslow

0

Ich glaube, der Unterschied kommt von nicht allen Artikeln im Prozess mit der where TRow : STeraRow<TKey> Bezeichnung.

+0

selbst die Erweiterungsmethode muss die gleiche Einschränkung haben? – Maslow

+0

anscheinend nicht, es kompiliert jetzt, dass ich den Typ Tippfehler korrigierte – Maslow

0

Problem war die Func eine FilledTable statt FilledTables haben sollte

abstract protected TableFilled<TKey, TRow> chGetTera(); 

    public TableFilled<TKey, TRow> getTera() 
    { 

     Func<TableFilled<TKey,TRow>> _getTera=new Func<TableFilled<TKey,TRow>>(
     ()=>{return chGetTera();}); 

return _getTera.TimeAndReport("Finished Teradata",OutputIfListener); 

//return chGetTera(); 

    } 
4

Rückkehr Sie mithilfe von Objekt typisieren können.

return (T)(object)(result); 

Für mich funktioniert es.

0

Convert.ChangeType sollte eine Lösung für Ihre Fragen sein:

(T) Convert.ChangeType(yourObject, typeof(T)); 
Verwandte Themen