public void Cast_Test() { var nullClass2 = null as Class2; var nullClass1 = nullClass2.Cast <Class1>(); Assert.AreEqual(nullClass1, null); Assert.AreEqual(nullClass2, null); Class1 class3 = new Class3(); { var result = class3.Cast <Class1>(); } Class2 class2 = new Class2(); Assert.ThrowsException <InvalidCastException>(() => { class2.Cast <Class3>(); }); Assert.ThrowsException <InvalidCastException>(() => { var a = (int)(object)class2; }); Assert.ThrowsException <InvalidCastException>(() => { var a = class2.Cast <int>(); }); Assert.ThrowsException <InvalidCastException>(() => { class2.Cast <short>(); }); Assert.ThrowsException <InvalidCastException>(() => { class2.Cast <double>(); }); Assert.ThrowsException <InvalidCastException>(() => { class2.Cast <char>(); }); }