In einem C# -Programm habe ich eine Methode erstellt, die ein Objekt aus einer Liste löscht. Der Benutzer gibt den Index des zu löschenden Elements ein, der Benutzer wird dann aufgefordert, das Löschen zu bestätigen, und das Element wird aus der Liste entfernt, wenn der Benutzer bestätigt, andernfalls bleibt die Liste gleich.
Ich bin mir nicht sicher über den besten Weg, Argumente an die Methode zu übergeben. Ich habe versucht, die Liste von Referenz vorbei (als out
Parameter):In C# sollte ich einen Parameter nach Wert übergeben und die gleiche Variable zurückgeben oder durch Referenz übergeben?
static void DeleteCustomer(out List<Customer> customers)
{
// ...display list of objects for user to choose from...
int deleteId = ReadInt("Enter ID of customer to delete: ");
Console.Write("Are you sure you want to delete this customer?");
if (Console.ReadLine().ToLower() == "y")
{
customers.RemoveAt(deleteId);
}
}
Der obige Code nicht, wie ich die Fehler Verwendung von nicht zugewiesenen lokalen Variablen ‚Kunden‘ und Die out-Parameter ‚Kunden erhalten funktioniert 'muss zugewiesen werden, bevor die Steuerung die aktuelle Methode verlässt. Ich dachte, ich könnte die Liste nach Wert übergeben und die gleiche Liste zurück, wie folgt aus:
static List<Customer> DeleteCustomer(List<Customer> customers)
{
int deleteId = ReadInt("Enter ID of customer to delete: ");
Console.Write("Are you sure you want to delete this customer?");
if (Console.ReadLine().ToLower() == "y")
{
customers.RemoveAt(deleteId);
}
return customers;
}
// ...which would be called from another method with:
List<Customer> customers = DeleteCustomer(customers);
aber dies scheint nicht effizient wie die gleiche Variable von Wert übergeben wird, und dann zurückgegangen.
Was ist der effizienteste Weg, Argumente in diesem Fall zu übergeben?
Liste wird durch Referenz automatisch übergeben, so dass es nicht zurückgegeben werden muss. Bei der aufrufenden Methode wird die Änderung in der Referenz auf die übergebene Liste angezeigt. –
user469104
Siehe: [Parameterübergabe in C# - Von Jon Skeet] (http://www.yoda.arachsys.com/csharp/parameters.html). Versuchen Sie auch die zweite Methode, ohne die Liste zurück zu senden, Sie werden sehen, dass sie geändert wurde. Dies liegt daran, dass die Adresse des Referenztyps als Wert übergeben wird. ** Aber wichtig **, sollten Sie sich jetzt keine Gedanken über Effizienz machen *, schreiben Sie Code, der die Absicht deutlicher vermittelt, und schauen Sie erst später nach verbesserter Leistung. – Habib
Die zweite Methode könnte den Rückgabetyp "void" haben. –