CSharp · Console
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var objects = new ArrayList()
{
"Foo", 1L, 1.1, 2.2M,
DateTime.Now,
new Nullable<DateTime>(DateTime.Now.AddDays(1)),
new List<object>()
{
new List<String> { "list1", "list2" },
Enumerable.Range(0,2)
},
new Dictionary<String, String> {
["key"] = "value"
}
};
Console.WriteLine("DynamicVisitor:");
new DynamicVisitor().Visit(objects);
Console.WriteLine("\n\nDynamicVisitorSubclass:");
new DynamicVisitorSubclass().Visit(objects);
}
}
public class DynamicVisitor
{
public virtual void Visit(IEnumerable value)
{
Console.WriteLine($"IEnumerable {value}");
foreach (dynamic d in value)
Visit(d);
}
public virtual void Visit(IList value)
{
Console.WriteLine($"IList {value.Count}");
foreach (dynamic d in value)
Visit(d);
}
public void Visit(Object value) => Console.WriteLine($"Object {value}");
public void Visit(Int32 value) => Console.WriteLine($"Int32 {value}");
public void Visit(DateTime value) => Console.WriteLine($"DateTime {value}");
public void Visit(String value) => Console.WriteLine($"String {value}");
public void Visit(Double value) => Console.WriteLine($"Double {value}");
}
public class DynamicVisitorBase
{
public virtual void Visit(IEnumerable value)
{
Console.WriteLine($"IEnumerable {value}");
foreach (dynamic d in value)
Visit(d);
}
public virtual void Visit(IList value)
{
Console.WriteLine($"IList {value.Count}");
foreach (dynamic d in value)
Visit(d);
}
}
public class DynamicVisitorSubclass
{
public void Visit(Object value) => Console.WriteLine($"Object {value}");
public void Visit(Int32 value) => Console.WriteLine($"Int32 {value}");
public void Visit(DateTime value) => Console.WriteLine($"DateTime {value}");
public void Visit(String value) => Console.WriteLine($"String {value}");
public void Visit(Double value) => Console.WriteLine($"Double {value}");
}