Ответ 1
Action doNothing = () => { };
Я хотел бы объявить "пустое" лямбда-выражение, которое делает, ну, ничего.
Есть ли способ сделать что-то подобное без использования метода DoNothing()
?
public MyViewModel()
{
SomeMenuCommand = new RelayCommand(
x => DoNothing(),
x => CanSomeMenuCommandExecute());
}
private void DoNothing()
{
}
private bool CanSomeMenuCommandExecute()
{
// this depends on my mood
}
Мое намерение в этом заключается только в управлении включенным/отключенным состоянием моей команды WPF, но в стороне. Может быть, это слишком рано утром для меня, но я полагаю, что должен быть способ просто объявить выражение lambda x => DoNothing()
каким-то образом таким образом, чтобы выполнить одно и то же:
SomeMenuCommand = new RelayCommand(
x => (),
x => CanSomeMenuCommandExecute());
Есть ли способ сделать это? Просто не нужно использовать метод do-nothing.
Action doNothing = () => { };
Это старый вопрос, но я подумал, что добавлю код, который я нашел полезным для такого типа ситуации. У меня есть статический класс Actions
и статический класс Functions
с некоторыми базовыми функциями в них:
public static class Actions
{
public static void Empty() { }
public static void Empty<T>(T value) { }
public static void Empty<T1, T2>(T1 value1, T2 value2) { }
/* Put as many overloads as you want */
}
public static class Functions
{
public static T Identity<T>(T value) { return value; }
public static T0 Default<T0>() { return default(T0); }
public static T0 Default<T1, T0>(T1 value1) { return default(T0); }
/* Put as many overloads as you want */
/* Some other potential methods */
public static bool IsNull<T>(T entity) where T : class { return entity == null; }
public static bool IsNonNull<T>(T entity) where T : class { return entity != null; }
/* Put as many overloads for True and False as you want */
public static bool True<T>(T entity) { return true; }
public static bool False<T>(T entity) { return false; }
}
Я считаю, что это помогает улучшить читаемость всего лишь немного:
SomeMenuCommand = new RelayCommand(
Actions.Empty,
x => CanSomeMenuCommandExecute());
// Another example:
var lOrderedStrings = GetCollectionOfStrings().OrderBy(Functions.Identity);
Это должно работать:
SomeMenuCommand = new RelayCommand(
x => {},
x => CanSomeMenuCommandExecute());
Предполагая, что вам нужен только делегат (а не дерево выражений), тогда это должно работать:
SomeMenuCommand = new RelayCommand(
x => {},
x => CanSomeMenuCommandExecute());
(Это не сработает с деревьями выражений, поскольку он получил тело оператора. Подробнее см. в разделе 4.6 спецификации С# 3.0.)
Я не совсем понимаю, зачем вам нужен метод DoNothing.
Не можете ли вы просто сделать:
SomeMenuCommand = new RelayCommand(
null,
x => CanSomeMenuCommandExecute());