public static void Main()
public static T GetData<T> ()
return Bool () ? null : new T ();
public static bool Bool ()
return new Random ().Next () % 2 == 0 ? true : false;
public static void CompareOld ()
var a = GetData<Object> ();
Console.WriteLine ("Can't compare");
var b = GetData<Object> ();
Console.WriteLine ("Can't compare");
Console.WriteLine ("a == b");
Console.WriteLine ("a != b");
Console.WriteLine ("finished!");
public static void Compare ()
var res = Defend (GetData<Object> (),
(a) => Defend (GetData<Object> (),
(b) => a == b ? "a == b" : "a != b"));
Console.WriteLine ("finished!");
public static string Defend (object a, Func<object, string> f)
return a == null ? "Can't compare" : f (a);
public static bool Defend (object o)
Console.WriteLine ("Can't compare");