Какова цель этого синтаксиса C #, который, по-видимому, использует анонимные функции и настройку свойства стиля javascript - PullRequest
1 голос
/ 19 октября 2011

Это из кодекса Orchard CMS.Я не понимаю, и как код ниже не бросает синтаксические ошибки.В основном, [parameter]:[Object], а также использование () => [возможно, анонимная функция]

return ContentShape("Parts_Product",
                () => shapeHelper.Parts_Product(
                    Sku: part.Sku,
                    Price: part.Price));

Ответы [ 6 ]

3 голосов
/ 19 октября 2011

Ты прав насчет первой части; () => ... представляет анонимную функцию, которая не принимает аргументов.

Вторая часть, которая вас смущает, известна как именованные аргументы . Это похоже на любой другой вызов функции, за исключением того, что код явно указывает, какой аргумент принадлежит какому параметру.

1 голос
/ 20 октября 2011

Суть в том, что помощник формы - это динамический объект, который динамически решает, что делать с вызовом функции, который вы на нем делаете.В этом случае нет метода Part_Product, он обрабатывается динамически.Clay, основа для этого, интерпретирует это как создание формы с именем Part_Product и со свойствами, указанными именованными параметрами, которые предоставляются методу.По сути, это перехватывает синтаксис C # для динамических методов и параметров именованных методов для создания динамических объектов.Чтобы дать вам точку сравнения, эквивалентный код в Javascript будет выглядеть примерно так:

return function() {
    return {
        Part_Product: {
            Sku: part.Sku,
            Price: part.Price
        }
    };
};
1 голос
/ 19 октября 2011

Второй параметр - это анонимная функция без параметров, которая возвращает результат метода shapeHelper.Parts_Product.Хэш отображения, передаваемый в качестве параметров, позволяет задавать значения параметров, не передавая их в порядке, указанном прототипом.

1 голос
/ 19 октября 2011

Sku и Price - именованные параметры , а () => - лямбда-выражение .Кроме того, вероятно shapeHelper динамический тип .

0 голосов
/ 19 октября 2011

Это анонимная функция без параметров. Он просто вызывает другой метод, используя именованные аргументы. Это удобно, когда у вас есть сложные подписи, такие как:

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

Здесь может быть сложно запомнить порядок параметров, и некоторые параметры могут быть необязательными, и вы можете захотеть использовать эти значения. Поэтому, когда вы вызываете функцию, вы явно указываете эти имена параметров следующим образом:

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

Дополнительные параметры и именованные аргументы появились в C # 4.0.

0 голосов
/ 19 октября 2011
() => shapeHelper.Parts_Product(
                    Sku: part.Sku,
                    Price: part.Price)

Анонимный делегат, объявленный с использованием лямбда-выражения.

...