<p>Maybe the need to do this is a 'design smell' but thinking about another question, I was wondering what the cleanest way to implement the <strong>inverse</strong> of this:</p>

<pre><code>foreach(ISomethingable somethingableClass in collectionOfRelatedObjects)
{
  somethingableClass.DoSomething();
}
</code></pre>

<p>i.e. How to get/iterate through all the objects that <em>don't</em> implement a particular interface?</p>

<p>Presumably you'd need to start by upcasting to the highest level:</p>

<pre><code>foreach(ParentType parentType in collectionOfRelatedObjects)
{
  // TODO: iterate through everything which *doesn't* implement ISomethingable 
} 
</code></pre>

<p>Answer by solving the TODO: in the cleanest/simplest and/or most efficient way</p>

Something like this?
```
```
foreach (ParentType parentType in collectionOfRelatedObjects) {
    if (!(parentType is ISomethingable)) {
    }
}
```
```