Domanda

È possibile dichiarare parametri opzionali nei metodi?

In delphi, ad esempio, posso fare qualcosa del tipo:

procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)

Quando chiamo quella funzione posso chiamarla con quattro parametri o con due parametri:

Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;

Come è possibile in C #?

È stato utile?

Soluzione

Temo che ciò non sia possibile in C # 1 a 3. Tuttavia, la buona notizia è che, poiché è stata una caratteristica molto richiesta (anche se ci sono sicuramente alcuni che preferirebbero non vederla), Microsoft ha finalmente ha deciso di aggiungerlo a C # 4.

La sintassi di C # 4 è la seguente:

public static void SayHello(string s = "Hello World!")
{
    Console.WriteLine(s);
}

Utilizzo:

SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."

(L'ultimo esempio utilizza un argomento denominato, che in questo caso non è necessario, ma aiuta quando si hanno più parametri opzionali.)

Puoi leggere di più sull'argomento su questo post sul blog .

Altri suggerimenti

O dovrai aspettare C # 4.0 , che supporta parametri opzionali o utilizza meccanismi di sovraccarico standard:

void Test(int p1, int p2, int p3, int p4)
{ }

void Test(int p1, int p2)
{
    Test(p1, p2, 2, 4);
}

Sarà possibile in C # 4.0, ma, fino a quando non verrà rilasciato, puoi aggirare il problema creando versioni sovraccaricate del tuo metodo:

public void MyMethod( int a, int b, int c )
{
    ...
}

public void MyMethod( int a, int b)
{
   MyMethod(a, b, 4);
}

Puoi usare argomenti variabili

Usa la parola chiave params.

void paramsExample(params int[] argsRest)
{

 if(argsRest.Length == 2) then...
 else if(argsRest.Length == 4) then...
 else error...

}
using System;
using System.Runtime.InteropServices;

   public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
   {
      Console.WriteLine(s);
   }

Fatto! :)

Non puoi ancora farlo. Penso che sia un funzione di C # 4.0 .

È possibile utilizzare i parametri come soluzione, ma può essere utilizzato solo in sequenza, non nel modo in cui alcune lingue trattano i parametri predefiniti.

Usi sovraccarichi come questo

Test(int p1, int p2)
Test(int p1, int p2, int p3)

Puoi farli chiamare un metodo privato come questo

Test(int[] ps)

e quindi elaborare i dati.

Un altro modo per gestirlo è NON usare sovraccarichi / parametri opzionali, e invece nominare i metodi in base a ciò che devono fare - potrebbe sembrare un cattivo compromesso, ma probabilmente il tuo codice sarà più facile da leggere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top