K
K.K.
Consider the following code:
// Define an empty class
public class ZorgleCollection : Dictionary<string, Zorgle>
{
}
// Somewhere outside ZorgleCollection:
// Print all the elements in this collection.
public void PrintAllMembers(ZorgleCollection collection)
{
// Method 1 -- foreach.
// Can't fill in the blank without specifying the types of the
// template parameters. But this breaks encapsulation!
foreach( ____(type name)____ entry in collection)
{
Console.WriteLine("Found entry: {0}", entry.Value);
}
// Method 2 -- use an enumerator.
// Still can't fill in the blank without specifying the types of
// the template parameters -- which also breaks encapsulation!
____(type name)____ enumerator = collection.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine("Found entry: {0}", entry.Value);
}
}
// ...
<<<<<<<<<<<
We can't use an enumerator without first knowing the template's type
parameters. By extension, since foreach is really just syntactic sugar
around enumerators, we can't use foreach either. How can I walk through the
collection without specifying the type, which breaks encapsulation and
creates dependencies? Or is this a doomed effort?
// Define an empty class
public class ZorgleCollection : Dictionary<string, Zorgle>
{
}
// Somewhere outside ZorgleCollection:
// Print all the elements in this collection.
public void PrintAllMembers(ZorgleCollection collection)
{
// Method 1 -- foreach.
// Can't fill in the blank without specifying the types of the
// template parameters. But this breaks encapsulation!
foreach( ____(type name)____ entry in collection)
{
Console.WriteLine("Found entry: {0}", entry.Value);
}
// Method 2 -- use an enumerator.
// Still can't fill in the blank without specifying the types of
// the template parameters -- which also breaks encapsulation!
____(type name)____ enumerator = collection.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine("Found entry: {0}", entry.Value);
}
}
// ...
<<<<<<<<<<<
We can't use an enumerator without first knowing the template's type
parameters. By extension, since foreach is really just syntactic sugar
around enumerators, we can't use foreach either. How can I walk through the
collection without specifying the type, which breaks encapsulation and
creates dependencies? Or is this a doomed effort?