2

私はこのようなことをしたいと思います(非常に単純化されたコード):

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

ここで単純なものが欠けている可能性がありますが、やりたいことを行う方法がわかりません。

4

2 に答える 2

5

ランタイムがメソッドのコードを生成できるように、型はコンパイル時の式である必要があります。これは、コードが生成される前に変数が定義されることをランタイムが保証できないためです。たとえば、Ngen ツールを使用すると、コードを実行せずにコードをプリコンパイルできます。

于 2013-07-06T10:06:17.453 に答える
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);
    }  
}

私はこれをすぐに書きましたが、一般的な考え方はそこにあります。

于 2013-07-06T10:12:35.010 に答える