Note This is not a question about how to implement or emulate duck typing in C#...
For several years I was under the impression that certain
C# language features were depdendent on data
structures defined in the language itself (which always seemed like
an odd chicken & egg scenario to me). For example, I was under the
impression that the
foreach loop was only available to
use with types that implemented
Since then I've come to understand that the C# compiler uses duck typing to determine whether an
object can be used in a foreach loop, looking for a
GetEnumerator method rather than
IEnumerable. This makes a lot of sense as it removes
the chicken & egg conundrum.
I'm a little confused as to why this isn't doesn't seem to be
the case with the
using block and
IDisposable. Is there any particular reason the
compiler can't use duck typing & look for a
method? What's the reason for this inconsistency?