<p>Given:</p>

<pre><code>interface I
{
}

class B: I
{
}

class C: I
{
}

class A
{

    public void Method(B arg)
    {
    }

    public void Method(C arg)
    {
    }

    public void Method(I arg)
    {
       // THIS is the method I want to simplify.
       if (I is B)
       {
          this.Method(arg as B);
       }
       else if (I is C)
       {
          this.Method(arg as C);
       }
    }
}
</code></pre>

<p>I know that there are better ways to design this type of interactions, but because of 
details which would take too long to explain this is not possible.
Since this pattern will be duplicated MANY times, I would like to replace the
conditional logic with a generic implementation which I could use just one line.
I can't see a simple way to implement this generic method/class, but my instincts tell me it should be possible.</p>

<p>Any help would be appreciated.</p>

It doesn't exist in a convenient form withing C# -
see here
for an idea based on F#'s pattern matching, that does exactly what you want. You can do some things with reflection to select the overload at runtime, but that will be very slow, and has severe issues if anything satisfies both overloads. If you had a return value you could use the conditional operator;
```
```
return (I is B) ? Method((B)I) : ((I is C) ? Method((C)I) : 0);
```
```
Again - not pretty.