在c#代码中需要帮助

时间:2010-06-02 10:08:50

标签: c# .net generics

我有一个功能

protected void bindCurrencies(DropDownList drp)
    {
        drp.DataSource = dtCurrencies;
        drp.DataTextField = "CurrencyName";
        drp.DataValueField = "CurrencyID";
        drp.DataBind();
        drp.Items.Insert(0, new ListItem("Please Select"));
    }

我正在使用此绑定下拉列表。但有时我还需要绑定一个ListBox。我不想为listbox编写不同的函数。我该怎么做我认为在这里使用泛型方法。但我对仿制药一无所知。

3 个答案:

答案 0 :(得分:9)

DropDownListListBox都继承自ListControl,因此如果您将函数更改为ListControl作为参数,则它应适用于这两种类型:

protected void bindCurrencies(ListControl drp)
{
    drp.DataSource = dtCurrencies;
    // and so on...

答案 1 :(得分:1)

请求ListControl。 ListBox和DropDownList都继承它,因此您可以使用它来包含它们。

如果您需要某个类的类,则会使用泛型(在大多数情况下)。例如,字符串列表将是泛型中的List。

答案 2 :(得分:-2)

将参数作为Object传递,然后只使用对象的:

.Getype()

围绕一个select语句并将其强制转换为该类型。

与传递ListControl的其他解决方案不同,这将允许您传递其他控件类型(并根据需要扩展逻辑)。

编辑1(回应塞巴斯蒂安):

 private void bindCurrencies(object PControl)
 {
    switch (PControl.GetType.ToString) {
        case "Windows.Forms.ListBox":
            Windows.Forms.ListBox ctrl = (Windows.Forms.ListBox)PControl;
            break;
        //Do Logic'
        case "Windows.Forms.DropDownList":
            break;
            //etc 
            //etc
    }
  }

永远记住: KISS (保持简单愚蠢)