对泛型和类型有点困惑

时间:2013-07-06 10:03:07

标签: c#

我想做这样的事情(大大简化的代码):

public class MyClass 
{

   private Type _listingType = typeof(AntiqueSellerListing);

   public DeleteEntity(int id) 
   {
       // This is what I would like to do, but it does not compile
       SystemLogic.DeleteItem<this._listingType>(id);

       // But this does
       SystemLogic.DeleteItem<AntiqueSellerListing>(id);
   }    
}

DeleteItem方法定义如下:

public void DeleteItem<T>(int primaryKeyValue) where T : class

我可能在这里遗漏了一些简单的东西,但我不知道如何做我想做的事。

2 个答案:

答案 0 :(得分:5)

类型必须是编译时表达式,以便运行时可以生成方法的代码。这是因为运行时无法保证在生成代码之前定义变量。例如,Ngen工具允许在不运行任何代码的情况下预编译代码。

答案 1 :(得分:0)

您可能希望添加一个描述“通用”方法的界面。只要类型满足界面的合同,你就可以了。

public interface IListing
{
    void DeleteItem(int id);
}

public AntiqueSellerListing : IListing
{
    public void DeleteItem(int id)
    {
        ... delete logic
    }
}

public class MyClass
{
    public void DeleteEntity<T>(T listing, int id)
        where T : IListing
    {
        SystemLogic.DeleteItem<T>(listing, id);
    }    
}

public static class SystemLogic
{
    public void DeleteItem<T>(T listing, int id)
        where T : IListing
    {
        listing.DeleteItem(id);
    }  
}

我已经写下了这个,但一般的想法就在那里。