C # не может неявно преобразовать тип T в тип T - PullRequest
1 голос
/ 17 июля 2009

мой метод:

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;
    }

Статический метод, который он вызывает

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;
    }

возвращаем определение класса:

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

Ответы [ 5 ]

4 голосов
/ 06 августа 2012

Вы можете набрать текст с помощью объекта.

return (T)(object)(result);

У меня это работает.

3 голосов
/ 17 июля 2009

Так в чем же разница между типом TableFilled и типом TablesFilled? Либо у вас есть опечатка в возвращаемом типе, либо у вас нет неявного преобразования между этими двумя типами.

0 голосов
/ 20 августа 2014

Convert.ChangeType должно быть решением для ваших вопросов:

(T) Convert.ChangeType(yourObject, typeof(T));
0 голосов
/ 17 июля 2009

Проблема в том, что Func должен был возвращать FilledTable вместо FilledTables

    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();

    }
0 голосов
/ 17 июля 2009

Я считаю, что разница заключается не во всех элементах процесса, имеющих обозначение where TRow : STeraRow<TKey>.

...