C # / Lambda: Что относится к param в следующем? - PullRequest
5 голосов
/ 06 октября 2010

Я смотрю на код от здесь

/// <summary>
/// Returns the command that, when invoked, attempts
/// to remove this workspace from the user interface.
/// </summary>
public ICommand CloseCommand
{
    get
    {
        if (_closeCommand == null)
            _closeCommand = new RelayCommand(param => this.OnRequestClose());

        return _closeCommand;
    }
}

что означает param в param => this.OnRequestClose()?

Ответы [ 4 ]

16 голосов
/ 06 октября 2010

RelayCommand предположительно является типом делегата, который принимает один параметр, или типом, который сам принимает такой тип делегата в конструкторе.Вы объявляете анонимный метод, говоря просто: «при вызове мы возьмем входящее значение (но затем не будем его использовать) и вызовем OnRequestClose. Вы также можете иметь (возможно, более ясное):

_closeCommand = new RelayCommand(delegate { this.OnRequestClose(); });

Это, вероятно, более понятно в других случаях, когда используется , например:

var ordered = qry.OrderBy(item => item.SomeValue);

, где лямбда "дано item, получите itemSomeValue ". В вашем случае лямбда" дана param, игнорируйте param и звоните OnRequestClose() "

1 голос
/ 06 октября 2010

param - единственный параметр вашего лямбда-выражения (param => this.OnRequestClose ())

Поскольку вы создаете экземпляр объекта ICommand, param, вероятно, будет содержать параметр, переданный этой ICommand из пользовательского интерфейса.В вашем случае параметр не используется в команде (он не отображается справа от лямбда-выражения).

1 голос
/ 06 октября 2010

Ничего.Строка определяет лямбда-выражение, представляющее функцию.Эта функция имеет такую ​​сигнатуру, как: Foo (T param), где T будет конкретным типом, передаваемым компилятором на основе типа аргумента вызываемого конструктора.

1 голос
/ 06 октября 2010

param => this.OnRequestClose () - это лямбда

Func<sometype_that_param_is,sometype_that_OnRequestClose_Is>

или Действие

Я не уверен, какой

Так что это просто выражение для функции, которая вызывается чем-то, которая передаст аргумент, который будет «param» и затем не используется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...