Ich habe die C++-Version dieser Frage aber ich habe es nicht wirklich verstanden.
Kann jemand bitte klar erklären, wenn es in C# getan werden kann, und wie?
Ich habe die C++-Version dieser Frage aber ich habe es nicht wirklich verstanden.
Kann jemand bitte klar erklären, wenn es in C# getan werden kann, und wie?
In C# 4 werden Sie in der Lage sein, die integrierte Unterstützung für Tupel zu nutzen, um dies einfach zu handhaben.
In der Zwischenzeit gibt es zwei Möglichkeiten.
Erstens können Sie ref- oder out-Parameter verwenden, um Ihren Parametern Werte zuzuweisen, die dann an die aufrufende Routine zurückgegeben werden.
Das sieht so aus:
void myFunction(ref int setMe, out int youMustSetMe);
Zweitens können Sie Ihre Rückgabewerte in eine Struktur oder Klasse verpacken und sie als Elemente dieser Struktur zurückgeben. KeyValuePair funktioniert gut für 2 - für mehr als 2 würden Sie eine benutzerdefinierte Klasse oder Struktur benötigen.
Hier sind grundlegende Two
Methoden:
1) Verwendung von out
' als Parameter Sie können 'out' auch für 4.0 und kleinere Versionen verwenden.
Beispiel für "out":
using System;
namespace out_parameter
{
class Program
{
//Accept two input parameter and returns two out value
public static void rect(int len, int width, out int area, out int perimeter)
{
area = len * width;
perimeter = 2 * (len + width);
}
static void Main(string[] args)
{
int area, perimeter;
// passing two parameter and getting two returning value
Program.rect(5, 4, out area, out perimeter);
Console.WriteLine("Area of Rectangle is {0}\t",area);
Console.WriteLine("Perimeter of Rectangle is {0}\t", perimeter);
Console.ReadLine();
}
}
}
出力します。
Fläche des Rechtecks ist 20
Der Umfang des Rechtecks beträgt 18
* Anmerkung: *Die out
-Schlüsselwort beschreibt Parameter, deren tatsächliche Variablenpositionen auf den Stack der aufgerufenen Methode kopiert werden, wo dieselben Positionen neu geschrieben werden können. Dies bedeutet, dass die aufrufende Methode auf den geänderten Parameter zugreifen wird.
2) Tuple<T>
Beispiel für Tupel:
Rückgabe mehrerer DataType-Werte mit Tuple<T>
using System;
class Program
{
static void Main()
{
// Create four-item tuple; use var implicit type.
var tuple = new Tuple<string, string[], int, int[]>("perl",
new string[] { "java", "c#" },
1,
new int[] { 2, 3 });
// Pass tuple as argument.
M(tuple);
}
static void M(Tuple<string, string[], int, int[]> tuple)
{
// Evaluate the tuple's items.
Console.WriteLine(tuple.Item1);
foreach (string value in tuple.Item2)
{
Console.WriteLine(value);
}
Console.WriteLine(tuple.Item3);
foreach (int value in tuple.Item4)
{
Console.WriteLine(value);
}
}
}
Sortie
perl
java
c#
1
2
3
HINWEIS: Die Verwendung von Tupel gilt ab Framework 4.0 und höher . Tuple
Typ ist ein class
. Sie wird an einem separaten Ort auf dem verwalteten Heap im Speicher zugewiesen. Sobald Sie die Tuple
können Sie die Werte seiner fields
. Dies macht die Tuple
mehr wie ein struct
.
Eine Methode, die einen Delegaten nimmt, kann dem Aufrufer mehrere Werte liefern. Dies ist eine Anleihe aus meiner Antwort aquí und verwendet ein wenig von Hadas' akzeptierte Antwort .
delegate void ValuesDelegate(int upVotes, int comments);
void GetMultipleValues(ValuesDelegate callback)
{
callback(1, 2);
}
Der Aufrufer stellt ein Lambda (oder eine benannte Funktion) bereit, und Intellisense hilft durch Kopieren der Variablennamen aus dem Delegaten.
GetMultipleValues((upVotes, comments) =>
{
Console.WriteLine($"This post has {upVotes} Up Votes and {comments} Comments.");
});
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Basierend auf der Antwort auf die erwähnte Frage, in C/C++ & vor dem Variablennamen bedeutet "pass by reference", mit Referenzparametern können Sie die Variable an die Funktion übergeben und ihren Wert innerhalb der Funktion ändern, in C# können Sie es mit ref / out Parametern tun