Ich versuche, mein eigenes verständlich Beispiel dafür, was das Verfahren RelayCommand tut im folgenden Code zu machen:Wie erhalten Sie dieses Beispiel, in dem Delegaten die Lambda-Syntax als Parameter übergeben?
return new RelayCommand(p => MessageBox.Show("It worked."));
der Konstruktor ist dies:
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
In my last question Jon Skeet mich darauf in die richtige Richtung, damit ich ein Beispiel (unten) bekommen konnte, das das tut, was ich wollte (übertrage einen Methodennamen wie in MessageBox.Show oben). Aber das Problem ist, um es zur Arbeit zu bringen, musste ich die ganze Lambda-Syntax (Action, Prädikat usw.) herausnehmen, was ich versuche zu verstehen.
Gibt es eine Möglichkeit, das Arbeitsbeispiel zu ändern, so dass es dieselbe Funktion ausführt, aber die Lambda-Syntax als Parameter verwendet, wie in den auskommentierten Zeilen unten?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestLambda24
{
class Program
{
static void Main(string[] args)
{
int[] numbers = { 6, 3, 7, 4, 8 };
//Console.WriteLine("The addition result is {0}.", Tools.ProcessNumbers(p => Tools.AddNumbers, numbers));
Console.WriteLine("The addition result is {0}.", Tools.ProcessNumbers(Tools.AddNumbers, numbers));
//Console.WriteLine("The multiplication result is {0}.", Tools.ProcessNumbers(p => Tools.MultiplyNumbers, numbers));
Console.WriteLine("The multiplication result is {0}.", Tools.ProcessNumbers(Tools.MultiplyNumbers, numbers));
Console.ReadLine();
}
}
class Tools
{
public static int ProcessNumbers(Func<int[], int> theMethod, int[] integers)
{
return theMethod(integers);
}
public static int AddNumbers(int[] numbers)
{
int result = 0;
foreach (int i in numbers)
{
result += i;
}
return result;
}
public static int MultiplyNumbers(int[] numbers)
{
int result = 1;
foreach (int i in numbers)
{
result *= i;
}
return result;
}
}
}