title: Duck type testing with C# 4 for dynamic objects
body: <p>I'm wanting to have a simple duck typing example in C# using dynamic objects.  It would seem to me, that a dynamic object should have HasValue/HasProperty/HasMethod methods with a single string parameter for the name of the value, property, or method you are looking for before trying to run against it.  I'm trying to avoid try/catch blocks, and deeper reflection if possible.  It just seems to be a common practice for duck typing in dynamic languages (JS, Ruby, Python etc.) that is to test for a property/method before trying to use it, then falling back to a default, or throwing a controlled exception.  The example below is basically what I want to accomplish.</p>
  
  <p>If the methods described above don't exist, does anyone have premade extension methods for dynamic that will do this?</p>
  
  <p><br />
  Example: In JavaScript I can test for a method on an object fairly easily.</p>
  
  <pre><code>//JavaScript
  function quack(duck) {
    if (duck && typeof duck.quack === "function") {
      return duck.quack();
    }
    return null; //nothing to return, not a duck
  }</code></pre>
  
  <p><br />
  How would I do the same in C#?</p>
  
  <pre><code>//C# 4
  dynamic Quack(dynamic duck)
  {
    //how do I test that the duck is not null, 
    //and has a quack method?
  
    //if it doesn't quack, return null
  }</code></pre>