Ricerca…


Osservazioni

Non c'è una risposta inerente in C # a questo - così chiamato - bisogno. Tuttavia ci sono soluzioni alternative per soddisfare questa esigenza.

Il motivo per cui qualificano il bisogno come "così chiamato" è che abbiamo bisogno solo di metodi con 2 o più di 2 valori da restituire quando violiamo i principi di programmazione. Soprattutto il principio della singola responsabilità .

Quindi, sarebbe meglio essere avvisati quando abbiamo bisogno di funzioni che restituiscono 2 o più valori e migliorare il nostro design.

soluzione "oggetto anonimo" + "parola chiave dinamica"

Puoi restituire un oggetto anonimo dalla tua funzione

public static object FunctionWithUnknowReturnValues ()
{
    /// anonymous object
    return new { a = 1, b = 2 };
}

E assegna il risultato a un oggetto dinamico e leggi i valori in esso contenuti.

/// dynamic object
dynamic x = FunctionWithUnknowReturnValues();

Console.WriteLine(x.a);
Console.WriteLine(x.b);

Soluzione tuple

Puoi restituire un'istanza della classe Tuple dalla tua funzione con due parametri del modello come Tuple<string, MyClass> :

public Tuple<string, MyClass> FunctionWith2ReturnValues ()
{
    return Tuple.Create("abc", new MyClass());
}

E leggi i valori come di seguito:

Console.WriteLine(x.Item1);
Console.WriteLine(x.Item2);

Parametri Ref e Out

La parola chiave ref viene utilizzata per passare un argomento come riferimento . out farà lo stesso di ref ma non richiede un valore assegnato dal chiamante prima di chiamare la funzione.

Parametro Ref : -Se si desidera passare una variabile come parametro ref, è necessario inizializzarla prima di passarla come parametro ref al metodo.

Out Parameter: - Se si desidera passare una variabile come parametro out, non è necessario inizializzarla prima di passarla come parametro out al metodo.

static void Main(string[] args)
{
    int a = 2;
    int b = 3;
    int add = 0;
    int mult= 0;
    AddOrMult(a, b, ref add, ref mult); //AddOrMult(a, b, out add, out mult);
    Console.WriteLine(add); //5
    Console.WriteLine(mult); //6
}

private static void AddOrMult(int a, int b, ref int add, ref int mult) //AddOrMult(int a, int b, out int add, out int mult)
{
    add = a + b;
    mult = a * b;
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow