2016-04-12 2 views
4

sagen, dass ich die folgenden Methoden in meinem Code haben:C# Unterstützung sowohl Mehrfach- und Einzelobjektoperationen

public bool RemoveItem(Item item) 
{ 
    // Logic to remove a single item 
} 

public bool RemoveItems(List<Item> items) 
{ 
    // Logic for removing multiple items. Running over all items and calling RemoveItem will be inefficient in my case 
} 

public bool AddItem(Item item) 
{ 
    // Logic for adding single item 
} 

public bool AddItems(List<Item> items) 
{ 
    // Logic for adding multiple items 
} 

Gibt es eine Möglichkeit, mehrere Methoden für jede Operation verhindern müssen? Ich habe viele solcher Methoden. Ich möchte jedes Paar Methoden irgendwie zu einem kombinieren ... gibt es einen schönen Weg dafür?

Ich kann eine Liste mit einzelnen Artikel erstellen und nur Methoden unterstützen, die Liste als Parameter nehmen, aber scheint mir hässlich.

Wie machen es andere Leute?

+0

Mithilfe von Schnittstellen und anonymen Objekten kann helfen. – Hozikimaru

+0

params Schlüsselwort könnte funktionieren, je nachdem, was genau Sie tun möchten. –

Antwort

8

Sie können Ihre Methoden mit params Stichwort erstellen:

public bool AddItems(params Item[] items) 
{ 
    ... 
} 

public bool RemoveItems(params Item[] items) 
{ 
    ... 
} 

Auf diese Weise können Sie diese Methoden wie folgt aufrufen:

AddItems(item); 
AddItems(item1, item2, ...); 
or 
AddItems(new Item[] { ... }); 
0

Besser jedes Mal eine Liste egal, wenn man einen oder viele Gegenstände und behandeln in einer einzigen Funktion.

4

Ihr Ansatz ist richtig. Dies ist die Art und Weise, wie es in der List-Klasse implementiert wird, wo Sie Add() und AddRange() haben

+0

Vielleicht sollte dieses Beispiel speziell getrennt werden, aber ich habe viele andere wie MarkItem/s, Felder ändern und solche Methoden. –