如何在表单中使用泛型方法?

时间:2015-01-28 11:31:15

标签: c# generics

我必须创建表单以在我的上下文中创建和编辑相同的外观类。我为这个类创建了接口:

public interface ICatalogItem
{
    int Id { get; }
    string Name { get; set; }
}

并有一个视图模型来显示它们:

public class MyViewModel
{
    public int Id{ set; get; }
    public string Name { set; get; }
}

现在我创建表单并使用以下方式显示:

public void ShowForm<T>() where T : class, ICatalogItem
{
    FillGrid<T>(...);
}

在FillGrid中,我有一个简单的代码:

public void FillGrid<T>(....) where T : class, ICatalogItem
{
    ....
    var objs= myContext.Set<T>().Where(expressionFunc).OrderBy(arch => arch.Name);
    .....
}

但我有问题如何处理按钮?例如,对于e搜索按钮,我使用代码:

private void _btnSearchClick(object sender, EventArgs e)
{
   FillGrid<T>(...);
}

但是couse <T>在这里无法解决 如何在表格中使用泛型?
或者唯一的方法 - 创建一个基本表单并为每个类实现它?

1 个答案:

答案 0 :(得分:1)

你可以像这样使用lambda表达式来形成一个闭包,让你可以访问T

public void FillGrid<T>(....) where T : class, ICatalogItem
{
    ....
    var objs= myContext.Set<T>().Where(expressionFunc).OrderBy(arch => arch.Name);
    .....
    _btnSearch.Click += (s, e) => FillGrid<T>(...);
    ....
}

很难从你的代码中判断出这应该是一个递归调用还是从你的其他通用方法调用,但这应该可以帮助你连接它。