public void TestCanCast() { Duck duck = new Duck(); IInterface proxy = DuckTyping.Cast <IInterface>(duck); Assert.IsTrue(DuckTyping.CanCast <IInterface, Duck>(), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast <IInterface>(duck), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast <IInterface>(typeof(Duck)), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast(typeof(IInterface), duck), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast(typeof(IInterface), typeof(Duck)), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast <Duck, IInterface>(), "CanCast should have returned true."); Assert.IsFalse(DuckTyping.CanCast <IFormattable>(duck), "CanCast should have returned false."); Assert.IsTrue(DuckTyping.CanCast <GeneralDelegate, SpecializedDelegate>(), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast <SpecializedDelegate, GeneralDelegate>(), "CanCast should have returned true."); Assert.IsFalse(DuckTyping.CanCast <GeneralDelegate, EventHandler>(), "CanCast should have returned false."); Assert.IsTrue(DuckTyping.CanCast <AttributeTargets, string>(), "CanCast should have returned true."); Assert.IsTrue(DuckTyping.CanCast <string, AttributeTargets>(), "CanCast should have returned true."); Assert.IsFalse(DuckTyping.CanCast <AttributeTargets, DateTime>(), "CanCast should have returned false."); }