¿Cuál es el propósito de esta sintaxis de C# que parece estar utilizando funciones anónimas y configuración de propiedad de estilo JavaScript?

StackOverflow https://stackoverflow.com/questions/7826838

  •  27-10-2019
  •  | 
  •  

Pregunta

Esto es de Orchard CMS Codegen. No entiendo y cómo el siguiente código no está lanzando errores de sintaxis. Principalmente, [parameter]:[Object] así como el uso de () => una función anónima quizás

return ContentShape("Parts_Product",
                () => shapeHelper.Parts_Product(
                    Sku: part.Sku,
                    Price: part.Price));
¿Fue útil?

Solución

Tienes razón sobre la primera parte; la () => ... representa una función anónima que no toma argumentos.

La segunda parte de la que estás confundido es conocido como argumentos nombrados. Es como cualquier otra llamada de función, excepto que el código indica explícitamente qué argumento pertenece a qué parámetro.

Otros consejos

Sku y Price son Parámetros con nombre y () => es expresión de lambda. Además, probablemente shapehelper es tipo dinámico.

El segundo parámetro es una función anónima sin parámetros que devuelve el resultado del shapeHelper.Parts_Product método. El hash de mapeo aprobado como parámetros permiten la especificación de los valores de los parámetros sin pasarlos en el orden designado por el prototipo.

El giro aquí es que el ayudante de forma es un objeto dinámico que decide dinámicamente qué hacer con la función que llama. En este caso, no hay un método de Part_Product, se está manejando dinámicamente. Clay, el marco debajo de esto, está interpretando esto como la creación de una forma llamada Part_Product y con las propiedades especificadas por los parámetros con nombre que se proporcionan al método. Esencialmente, esta secuencia de sintaxis C# para métodos dinámicos y parámetros de método nombrados para construir objetos dinámicos. Para darle un punto de comparación, el código equivalente en JavaScript se vería algo así como:

return function() {
    return {
        Part_Product: {
            Sku: part.Sku,
            Price: part.Price
        }
    };
};
() => shapeHelper.Parts_Product(
                    Sku: part.Sku,
                    Price: part.Price)

Es un delegado anónimo declarado usando una expresión de lambda.

Es una función anónima sin parámetros. Simplemente llama a otro método usando argumentos con nombre. Es útil cuando tienes firmas complicadas como:

private void DoSomething(string param1, string param2="param2default", string param3);

Puede ser difícil recordar el orden de parámetros aquí y algunos de los parámetros pueden ser opcionales y es posible que desee usar esos valores. Entonces, al llamar a la función, indica explícitamente esos nombres de parámetros como este:

DoSomething(param1:"x", param3:"y");

Los parámetros opcionales y los argumentos nombrados salieron con C# 4.0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top