2011-12-22 64 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