To commemorate the first beta release of the first CLR to contain the DLR, I’m going to try to implement something more interesting than useful – a dynamic version of the DataTable class. My goal is to show how the dynamic support in C#4 and VB10 can be used to create a better development experience, and to show how you can work effectively with IDynamicMetaObjectProvider.
The BCL’s DataTable is already fairly dynamic; its columns can vary at runtime in type and name. You can even add and remove columns on-the-fly. As such, it’s a pretty good candidate for “dynamicizing”. Of course, we can’t actually modify the existing DataTable implementation, so I’ll start out by creating a wrapper for it using DynamicObject. Where I hope to end up is with a self-contained implementation that implements its own DynamicMetaObject rather than leaning on DynamicObject and DataTable.
Here’s a sneak preview of Part 1:
public static class Program { private static DataTable CreateTable() { DataTable table = new DataTable(); table.Columns.Add("Name", typeof(string)); table.Columns.Add("Value", typeof(int)); table.Rows.Add("Bob", 23); table.Rows.Add("Karen", 17); table.Rows.Add("Allen", 10); table.Rows.Add("Grace", 31); return table; } public static void Main(string[] args) { DataTable table = CreateTable(); dynamic t = new DynamicDataTable(table); t.NewName = t.Name; t.Name = "unknown"; foreach (var r in t.NewName) { System.Console.WriteLine(r); } } }
See you again soon!