Mi capita di vedere un codice simile a questo.casting dinamico nel parametro C#
function((dynamic) param1, param2);
Quando e perché è necessario questo tipo di trasmissione di tipo dinamico per i parametri?
Mi capita di vedere un codice simile a questo.casting dinamico nel parametro C#
function((dynamic) param1, param2);
Quando e perché è necessario questo tipo di trasmissione di tipo dinamico per i parametri?
Può essere usato per scegliere dinamicamente un sovraccarico di function(...)
in base al tipo di param1
in fase di esecuzione, ad esempio:
public static void Something(string x)
{
Console.WriteLine("Hello");
}
public static void Something(int x)
{
Console.WriteLine("Goodbye");
}
public static void Main()
{
object x = "A String";
// This will choose string overload of Something() and output "Hello"
Something((dynamic)x);
x = 13;
// This will choose int overload of Something() and output "Goodbye"
Something((dynamic)x);
}
Così, anche se x
è un riferimento ad object
, si deciderà a runtime cosa sovraccarico di Something()
da chiamare. Si noti che se non vi è un sovraccarico appropriato, verrà generata un'eccezione:
// ...
x = 3.14;
// No overload of Something(double) exists, so this throws at runtime.
Something((dynamic)x);
Mi piacerebbe vedere di più. In genere, se la funzione accetta una variabile dinamica, * potresti * eseguire il cast, ma non è necessario. – scottm
@scottm: Questo è quello che stavo pensando inizialmente, poi mi sono ricordato che puoi anche usarlo per scegliere il sovraccarico corretto di un metodo in fase di esecuzione. –
@JamesMichaelHare Caso di uso molto piccolo. Questo è il tipo di cosa che rimprovererò uno sviluppatore precedente per l'uso intenzionale. – scottm