2011-12-22 65 views
0

我有下面的代码工作之前,我改变了使用泛型的服务:C#泛型拳击错误

更新:我增加了一些类和接口的信息响应评论:

public class Service<T1,T2> : BaseService, IService<T1> 
     where T1 : IAuditableTable 
     where T2 : IAuditableTable 
{ 
    private IAzureTable<T1> _T1repository; 
    private IAzureTable<T2> _T2repository; 

    public Service(string ds) 
    { 
     base.Initialize(ds); 
     _T1repository = StorageHelper.GetTable<T1>(ds); 
     _T2repository = StorageHelper.GetTable<T2>(ds); 
    } 

    public IEnumerable<AdminDetail> ShowDetails() 
    { 
     return base.ShowDetails(_T1repository, _T2repository); 
    } 

    ... 

public IEnumerable<AdminSummary> ShowSummary<T1, T2>(
     IAzureTable<T1> master, IAzureTable<T2> detail) 
    where T1 : AuditableTable 
    where T2 : AuditableTable 
{ 
    ... 

public abstract class AuditableTable : TableServiceEntity, IAuditableTable 
{ 
    ... 

public interface IAzureTable<T> : IInitializer 

public interface IService<T> 
     where T : IAuditableTable 
    { 
     IEnumerable<AdminSummary> ShowSummary(); 
    } 

private IService<Account> _account; 
vm.AdminSummaries = _account.ShowSummary(); << calls the report 

当我尝试编译我收到以下消息:

类型 'T2' 不能被用作在通用类型的类型参数 'T2' 或 方法“Services.BaseService.ShowSummary < T1,T2>(AzureToolkit.IAzureTable < T1>,AzureToolkit.IAzureTable < T2 >)”。没有从'T2'到'Storage.Models.AuditableTable'的装箱转换或类型参数转换。

+0

您的'IAzureTable '界面的签名是什么? – 2011-12-22 08:33:31

+0

是ShowSummary Service的成员? – dtb 2011-12-22 08:34:33

+0

@dtb:编译错误说它是基类“BaseService”的成员。 – 2011-12-22 08:36:30

回答

0

您可能需要T2上的class约束。

+0

我在问题中添加了更多信息。这有助于解释吗?谢谢 – 2011-12-22 08:47:59

0

需要ShowSummaryAuditableTable类型(它实现IAuditableTable)。您只需要提供值为IAuditableTable的地方,它需要具体的类别。反过来(在接口类型参数中的具体实现)可能会工作。

+0

添加到问题的一些更多详细信息 – 2011-12-22 08:48:17