 <p>Is it fair to assume that you control the types which have "CustomPropertyOfControl"? If so, make them all implement an interface, and cast to that interface.</p> <p>The point of a cast is to tell the compiler something you know that it doesn't - <em>at compile time</em>. Here you don't know the type at compile time. If you know some base class or interface, then you can tell the compiler <em>that</em> with no problem.</p> <p>Now in C# 4 you <em>could</em> do this using dynamic typing:</p> <pre><code>private void ConvertToTypeAndUseCustomProperty(Control c) { dynamic d = c; d.CustomPropertyOfControl = 234567; } </code></pre> <p>However, even though you <em>can</em> do this, I'd still recommend sticking with static typing if at all possible - if you've got a group of types which all have some common functionality, give them a common interface.</p>