using System.Collections.Generic;
public static void Main()
User.Factory.Generate(100)
Console.WriteLine("-------");
Console.WriteLine("exists: " + exists.ToString());
Console.WriteLine("-------");
.IfNotNull(user=> Console.WriteLine( user.Name + " found!"));
public static class Extensions {
public static void Print(this IEnumerable<User> list){
.ForEach(i=> Console.WriteLine(i.Name));
public static IEnumerable<User> OnlyActive(this IEnumerable<User> list) {
return list.Where(i=> i.Status == User.StatusCode.Active);
public static IEnumerable<User> OlderThan(this IEnumerable<User> list, int age) {
return list.Where(i=> i.Age > age);
public static IEnumerable<User> YoungerThan(this IEnumerable<User> list, int age) {
return list.Where(i=> i.Age < age);
public static User GetById(this IEnumerable<User> list, int Id) {
return list.SingleOrDefault(i=> i.Id == Id);
public static class OtherExtensions{
public static bool IsNull(this object obj){
public static bool IsNotNull(this object obj){
public static void IfNotNull<T>(this T obj, Action<T> action){
public sealed class User {
public string Name {set;get;}
public int Age {set;get;}
public StatusCode Status {set;get;}
Name = "name_" + id.ToString();
static StatusCode getCode(int id) {
case 0: return StatusCode.Active;
case 1: return StatusCode.InActive;
case 2: return StatusCode.Suspended;
default: throw new Exception();
public static class Factory {
public static List<User> Generate(int count){