.net 3.5 C#无法将类型T隐式转换为类型T

.net 3.5 C#无法将类型T隐式转换为类型T,.net-3.5,lambda,extension-methods,.net 3.5,Lambda,Extension Methods,我的方法: public TableFilled<TKey, TRow> getTera() { Func<TablesFilled<TKey,TRow>> _getTera=new Func<TablesFilled<TKey,TRow>>( ()=>{return (TablesFilled<TKey,TRow>) chGetTera();}); //Abo

我的方法:

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 TableFilled getTera()
{
Func _getTera=新Func(
()=>{return(tablefilled)chGetTera();});
//以上未编译说明:无法转换类型
//“acapsvirify.FunctionalTables.TableFilled”到
//'AcapsVerify.FunctionalTables.TablesFilled'
//下面的行有相同的蓝色下划线错误。
返回_getTera.TimeAndReport(“完成的Teradata”,OutputIfListener);
//这个很好用
返回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 static T TimeAndReport(此函数为timedFunc、String reportLead、Action reporterAction)
{
T结果;
var s=新的System.Diagnostics.Stopwatch();
s、 Start();
结果=timedFunc();
s、 停止();
reporterAction(reportLead+“in”+s.WholePartOnly());
返回结果;
}
返回类定义:

public class TableFilled<TKey,TRow> where TRow: STeraRow<TKey>
公共类表格已填充,其中TRow:STeraRow

我认为差异来自于流程中并非所有项目都具有
where TRow:STeraRow
名称。

我认为差异来自于流程中并非所有项目都具有
where TRow:STeraRow
名称。

那么表格填充类型和表格填充类型之间的区别是什么呢?您的返回类型可能有输入错误,或者这两种类型之间没有隐式转换

那么TableFilled类型和TableFilled类型之间有什么区别呢?您的返回类型可能有输入错误,或者这两种类型之间没有隐式转换

问题是Func应该返回FilledTable而不是FilledTable

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

    }
abstract protected TableFilled chGetTera();
公共表格
{
Func _getTera=新Func(
()=>{return chGetTera();});
返回_getTera.TimeAndReport(“完成的Teradata”,OutputIfListener);
//返回chGetTera();
}

问题是Func应该返回一个FilledTable而不是FilledTable

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

    }
abstract protected TableFilled chGetTera();
公共表格
{
Func _getTera=新Func(
()=>{return chGetTera();});
返回_getTera.TimeAndReport(“完成的Teradata”,OutputIfListener);
//返回chGetTera();
}

您可以使用对象进行类型转换

return (T)(object)(result);

对我来说,它很有效。

您可以使用object进行类型转换

return (T)(object)(result);

对我来说,它是有效的。

转换。ChangeType应该是您问题的解决方案:

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

Convert.ChangeType应该是您问题的解决方案:

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

很抱歉,它们具有相同的签名,我将其编辑为TableFilled Showing,但即使它们具有相同的定义,也无法将TableFilled转换为TableFilled,这就是问题所在。你真的需要有两个只有一个字母中间变化的名字吗?圣牛…是的,这就是问题所在。对于已填充的表对,是否有更好的名称建议,以便进行比较?很抱歉,它们具有相同的签名,我将其编辑为具有TableFilled Showing,但即使它们具有相同的定义,也无法从TableFilled转换为TableFilled-这就是问题所在。你真的需要有两个只有一个字母中间变化的名字吗?圣牛…是的,这就是问题所在。有没有为已填充的表对提供更好的名称的建议,以便进行比较?即使扩展方法也必须具有相同的限制?显然没有,现在正在编译,因为我已修复了类型类型类型,即使扩展方法也必须具有相同的限制?显然没有,它现在正在编译,我修正了类型输入,为了把它放到更多的上下文中,我正在制作一个函数表比较程序,其中一个是主表,一个是副本。从功能上讲,填充表不同于构建它的类。我想让所有的表工厂报告他们花了多长时间,如果有人在听的话。为了更深入地理解这一点,我正在制作一个功能表比较程序,其中一个是主表,一个是副本。从功能上讲,填充表不同于构建它的类。如果有人在听,我想让所有的制表厂报告他们花了多长时间。