繁体   English   中英

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

[英]C# defining one method for different types of argument

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

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

但是可以为不同的参数集创建一个函数定义吗? 就我而言,它将用于IListList 由于这些类型仅略有不同,因此我可以对IListList对象使用相同的函数(这是一个简单的函数,仅查找某些特定元素)。 是否有任何聪明的方法可以做到这一点,例如不是复制粘贴?

谢谢!

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

例如,您可以声明

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

并且您将传递的列表可以是具体的List或实现IList的类型,而无需声明两个方法。

好吧,如果您尝试使用IListList 我认为您不需要其他方法。 由于List实现了IList ,因此您可以轻松地将它们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();
}

IList内部继承的列表对象。 因此,无论您在方法中使用哪种对象类型,都可以在调用方法时将IList转换为List对象或将List对象转换为IList。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM