Resulta que veo un código como este.fundición de tipo dinámico en parámetro en C#
function((dynamic) param1, param2);
¿Cuándo y por qué necesitamos este tipo de conversión de tipo dinámico para los parámetros?
Resulta que veo un código como este.fundición de tipo dinámico en parámetro en C#
function((dynamic) param1, param2);
¿Cuándo y por qué necesitamos este tipo de conversión de tipo dinámico para los parámetros?
Se puede utilizar para seleccionar dinámicamente una sobrecarga de function(...)
basado en el tipo de param1
en tiempo de ejecución, por ejemplo:
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);
}
Así que, aunque x
es una referencia a object
, que decidirá en tiempo de ejecución lo sobrecarga de Something()
para llamar. Tenga en cuenta que si no hay una sobrecarga adecuada, se lanzará una excepción:
// ...
x = 3.14;
// No overload of Something(double) exists, so this throws at runtime.
Something((dynamic)x);
Me gustaría ver más. Generalmente, si la función toma una variable dinámica, * usted * podría * emitir, pero no es necesario. – scottm
@scottm: Eso es lo que estaba pensando inicialmente, entonces recordé que también puedes usarlo para elegir la sobrecarga correcta de un método en tiempo de ejecución. –
@JamesMichaelHare Caso de uso muy pequeño. Este es el tipo de cosas que regañaría a un desarrollador anterior por usar intencionalmente. – scottm