2009-07-17 128 views
1

我的方法:C#不能隐式转换类型T为T类型

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> 
+0

要把它放到更多的情况下,我正在做一个功能表比较程序,其中一个是主表,一个是复制。在功能上,填充表与构建它的类不同。我想让所有的餐桌工厂报告,如果有人在倾听,他们会花多长时间。 – Maslow 2009-07-17 19:52:36

回答

3

那么TableFilled类型和TablesFilled类型有什么区别?您的返回类型中有一个错字,或者两种类型之间没有隐式转换。

0

我相信差异来来自并非所有具有where TRow : STeraRow<TKey>指定的项目。

+0

即使扩展方法也必须具有相同的限制吗? – Maslow 2009-07-17 19:50:23

+0

显然不是,它现在正在编译我修复了类型错别字 – Maslow 2009-07-17 20:00:09

0

问题是Func键应该已经返回,而不是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(); 

    } 
4

您可以通过使用对象类型转换一个FilledTable。

return (T)(object)(result); 

对我来说,它的工作原理。

0

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

(T) Convert.ChangeType(yourObject, typeof(T)); 
相关问题