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

How to use generic methods in form?

我必须创建表单以在我的上下文中创建和编辑外观相同的 classes。我为此 classes:

创建了界面
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);
    .....
}

但是我有一个关于如何处理按钮的问题?例如,对于电子搜索按钮,我使用代码:

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

但是<T>当然不能在这里解决
如何在表单中使用泛型?
或者唯一的方法 - 创建一个基本表单并为每个 class?

实现它

您可以像这样使用 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>(...);
    ....
}

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