我想做这样的事情(大大简化的代码):
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
我可能在这里遗漏了一些简单的东西,但我不知道如何做我想做的事。
答案 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);
}
}
我已经写下了这个,但一般的想法就在那里。