【问题标题】:trying to combine two similar user controls using generics尝试使用泛型组合两个相似的用户控件
【发布时间】:2014-06-23 10:55:05
【问题描述】:

看到下面here in StackOverflow

void SomeMethod<T>(List<T> someList)
{
    if (typeof(T) == typeof(c1))
    {
         // etc
    }
}

我试图以某种方式将其合并到以下内容中。我正在尝试使用泛型组合两个非常相似的用户控件

public partial class UcCustomers : System.Web.UI.UserControl
{
    List<Customer> _list;

    public void SetDataSource(List<Customer> customers){
        _list = customers
    }

}


public partial class UcProducts : System.Web.UI.UserControl
{
    List<Products> _list;

    public void SetDataSource(List<Product> products){
        _list = products
    }

}

问题是,我想设置该成员 _list 变量,但除非我执行以下操作,否则它不会让我这样做:

IEnumerable _list;

但是我不能将 lambda 与那种类型的变量一起使用。我的目标是拥有一个具有一些非常基本的 CRUD 功能的 GridView 用户控件。

我认为 SetDataSource 可以接受通用 List 并将其用作成员变量。

【问题讨论】:

  • 合并如何?您可以为您的问题添加更多代码或上下文吗?如果您尝试组合两个控件共有的代码,您还可以考虑制作一个基本用户控件,然后让客户和产品继承自该控件。
  • 您能否提供您的代码并在您的代码中指定问题以澄清问题?
  • 换句话说,你想要public void SetDataSource&lt;T&gt;(T dataSource)之类的东西?我认为这是相当多余的,因为它已经采用了一个通用列表......你能举一个你正在寻找的例子(甚至是伪代码)吗?

标签: c# asp.net user-controls


【解决方案1】:

我认为你需要一个带有约束的泛型类。如果您的ProductsCustomer 不是从UserControl 派生的,则只需修改where 子句即可。

 public class Uc<T> : UserControl where T : UserControl
    {
        private List<T> _list;

        public void SetDataSource(List<T> list)
        {
            _list = list;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多