Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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!
Comments
- Anonymous
May 23, 2009
Let’s get started by doing “the simplest thing that could possibly work”. public class DynamicDataTable