ich die folgende Methode definiert haben:Parameter: (erforderlich, optional) vs (Pflicht-, optional)
void Write(string fileContent, string fileName, string container = StorageBlobContainers.ProfilePictures)
Der Code ohne Probleme kompiliert, so schrieb ich den Code, um sie auszuführen (von a Different-Datei):
string json = JsonConvert.SerializeXNode(node);
FileProcessor.Write(json, "productscontainer");
Aber es schien wie aus irgendeinem Grund es einfach nichts getan hat.
Nach ein paar Minuten des Ringens, um das Problem zu verstehen, habe ich es endlich gefunden. Irgendwo in der gleichen Klasse, gab es bereits eine Write
Funktion wie folgt definiert:
void Write(string filePath, string container = StorageBlobContainers.ProfilePictures)
{
if (!File.Exists(filePath))
return string.Empty;
...
Das verwirrte mich wirklich, wie es gut tat kompilieren, und natürlich macht es Sinn, als eine Methode hat drei Parameter Signatur und die Anderer hat 2, aber ist das nicht sehr zweideutig und/oder fehleranfällig? Für mich scheint keine der Methoden die "logische" zu sein. Warum wird der zweite über den anderen gewählt?
"Warum wird das zweite über das andere gewählt?" - weil das die Regeln der Sprache sind. Wir können die Sprachspezifikation streichen, wenn Sie möchten, und auf die spezifischen Gründe hinweisen, die zu diesem Punkt geführt haben, aber es ist unwahrscheinlich, dass Sie weiterkommen. –
Wie ist die 2. Methode keine logische Wahl? Sie rufen eine Methode mit 2 String-Parametern auf und die gewählte Methode ist diejenige mit 2 String-Parametern. Es ist eine perfekte Passform. –
Beachten Sie außerdem, dass der Sprache nach Version 1 optionale Parameter hinzugefügt wurden und der bloße Vorgang des Zurückgehens auf alten Code und das Hinzufügen von Standardwerten nicht dazu geführt haben sollte, dass zuvor kompilierter Code nicht kompiliert oder eine andere Methode ausgewählt wurde. –