Я наклоняю delagate и лямбда выражения. Я написал несколько тестовых кодов, которые используют Count(), некоторые из них работают, но в последнее время не работают, я не знаю почему. Пожалуйста, помогите мне с объяснением. Спасибо.Делегат для предиката не работает
public static int Count<T>(T[] arr, Predicate<T> condition)
{
int counter = 0;
for (int i = 0; i < arr.Length; i++)
if (condition(arr[i]))
counter++;
return counter;
}
delegate Boolean IsOdds<T>(T x);
delegate bool IsEven(int x);
private void button1_Click(object sender, EventArgs e)
{
IsOdds<int> isOdds = i => i % 2 == 1;//must be <int>, not <T>
IsEven isEven = i => i % 2 == 0;
Action<int> a = x => this.Text = (x*3).ToString();
a(3);
Predicate<int> f = delegate(int x) { return x % 2 == 1; };
Predicate<int> ff = x => x % 2 == 1;
MessageBox.Show("lambada " + Count<int>(new int[] { 1, 2, 3, 4, 5 }, x => x % 2 == 1).ToString());
MessageBox.Show("f " + Count<int>(new int[] { 1, 2, 3, 4, 5 }, f).ToString());
MessageBox.Show("ff " + Count<int>(new int[] { 1, 2, 3, 4, 5 }, ff).ToString());
MessageBox.Show("delegate " + Count<int>(new int[] { 1, 2, 3, 4, 5 }, delegate(int x) { return x % 2 == 1; }).ToString());
MessageBox.Show(Count<int>(new int[] { 1, 2, 3, 4, 5 }, isOdds(int x)).ToString()); //this is wrong
MessageBox.Show(Count<int>(new int[] { 1, 2, 3, 4, 5 }, isEven(int x)).ToString()); //this is wrong
return;
}
Спасибо очень много. – peter