C#为不同类型的参数定义一种方法

时间:2014-04-30 12:37:18

标签: c#

我已经看到你可以在c#中为不同的参数集定义不同的函数,如下所示:

public bool foo(string bar) {
    //do something1
}
public bool foo(int bar, bool spam) {
    //do something2
}

但是,您可以为不同的参数集创建单个函数定义吗?就我而言,它将适用于IListList。由于这些类型只是略有变化,我可以对IListList对象使用相同的函数(这是一个只查找某个特定元素的简单函数)。有没有聪明的方法可以做到这一点,就像没有copypasta一样?

谢谢!

3 个答案:

答案 0 :(得分:8)

是的,您只能使用IList作为参数的类型,因为List实现了IList

例如,您可以声明

public void MethodName(IList list)
{
    // Method's body.
}

,您将传递的列表可以是具体的List,也可以是实现IList的类型,而不必声明两个方法。

答案 1 :(得分:1)

好吧,如果您尝试使用IListList。我不认为你需要不同的方法。因为List实现了IList,因此您可以轻松地将它们转换为代码。所以相同的功能对两者都有效。

如果你没有修改函数中的项目,那么你可以更进一步,并使用IEnumerable作为参数类型。

,例如 -

protected void Method(IList list){

}

protected void Method(IEnumerable items){
}

但请记住,使用接口时存在差异,它们通过引用传递,因此不会创建新副本。您所做的任何修改都会影响原始项目集合。如果您需要传递值或想在内部创建新的副本调用.ToList() -

,例如 -

protected void Method(IList list){
    //some code
    var copied = list.ToList();
}

protected void Method(IEnumerable items){
    //some code
    var copied = items.ToList();
}

答案 2 :(得分:0)

IList内部继承的列表对象。 因此,当您调用方法然后将IList转换为List对象或List对象时,请使用IList在方法中使用对象类型。