簡體   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