|
|
Erweiterungsmethode Where
A02.cs
/* Selecting elements from a sequence
This example reimplements the method Where from class
System.Linq.Enumerable and applies it to an array of integers
and to an array of points.
------------------------------------------------------------*/
using System;
using System.Collections.Generic;
// static class with an extension method Where, which can be applied to
// IEnumerable< T >
static class Util {
public static IEnumerable< T > Where< T >(this IEnumerable sequence, Func< T, bool> matches) {
foreach (T elem in sequence) {
if (matches(elem)) yield return elem;
}
}
}
struct Point {
public int x ,y;
public Point(int x, int y) { this.x = x; this.y = y; }
}
public class A2 {
public static void Main() {
//-- Selecting all even numbers
int[] numbers = {1, 2, 3, 4 ,5, 6, 7, 8, 9, 10};
Console.Write("Even numbers from ");
foreach (int i in numbers) Console.Write(i + " ");
Console.WriteLine();
Console.Write("=> ");
var result1 = numbers.Where(x => x % 2 == 0);
foreach (int i in result1) Console.Write(i + " ");
Console.WriteLine();
Console.WriteLine();
//-- Selecting all points in the upper right quadrant
List points = new List {
new Point(1, 2),
new Point(-1, 2),
new Point(3, -1),
new Point(4, 2)
};
foreach (Point p in points) Console.Write("({0},{1}) ", p.x, p.y);
Console.WriteLine();
Console.Write("Points in upper right quadrant: ");
var result2 = points.Where(p => p.x >= 0 && p.y >= 0);
foreach (Point p in result2) Console.Write("({0},{1}) ", p.x, p.y);
Console.WriteLine();
}
}
|
|