W
Wiktor Zychla [C# MVP]
since generics allow us to implement several IEnumerable<T> interfaces on a
single class, I think that "foreach" should somehow reflect that.
suppose we have a enumerable class
class C : IEnumerable, IEnumerable<int>, IEnumerable<string> { ...
we are allowed to enumerate IEnumerable:
foreach ( object item in o ) ...
but other IEnumerables are not so easy:
foreach ( int item in (IEnumerable<int>)o ) ...
or
class C : ....
{
public IEnumerable<int> Ints
{
get
{
return (IEnumerable<int>)this;
....
foreach ( int item in o.Ints ) ...
What I think of is some form of selecting the IEnumerable with foreach:
foreach ( object item in o ) // enumerate IEnumerable
foreach ( int item in o ) // enumerate IEnumerable
foreach ( string item in o ) // enumerate IEnumerable
foreach<int> ( int item in o ) // enumerate IEnumerable<int>
foreach<string> ( string item in o ) // enumerate IEnumerable<string>
since the type name is duplicated in former cases, I would even like to
write:
....
foreach<int> ( item in o ) ... // enumerate IEnumerable<int>
foreach<string> ( item in o ) ... // enumerate IEnumerable<string>
and that's it. I open the discussion.
Regards,
Wiktor Zychla
single class, I think that "foreach" should somehow reflect that.
suppose we have a enumerable class
class C : IEnumerable, IEnumerable<int>, IEnumerable<string> { ...
we are allowed to enumerate IEnumerable:
foreach ( object item in o ) ...
but other IEnumerables are not so easy:
foreach ( int item in (IEnumerable<int>)o ) ...
or
class C : ....
{
public IEnumerable<int> Ints
{
get
{
return (IEnumerable<int>)this;
....
foreach ( int item in o.Ints ) ...
What I think of is some form of selecting the IEnumerable with foreach:
foreach ( object item in o ) // enumerate IEnumerable
foreach ( int item in o ) // enumerate IEnumerable
foreach ( string item in o ) // enumerate IEnumerable
foreach<int> ( int item in o ) // enumerate IEnumerable<int>
foreach<string> ( string item in o ) // enumerate IEnumerable<string>
since the type name is duplicated in former cases, I would even like to
write:
....
foreach<int> ( item in o ) ... // enumerate IEnumerable<int>
foreach<string> ( item in o ) ... // enumerate IEnumerable<string>
and that's it. I open the discussion.
Regards,
Wiktor Zychla