Well, it looks like you're putting a wrapper around ObjectId.GetObject(),
that uses reflection to access members of the underlying DBObject.
Personally, I would want no part of anything that uses reflection
as it can be up to 500x slower than direct calls via code.
The only place where I think it may be useful is in a data-binding
context, where one is data binding to a property of a DBObject,
but where the datasource is or must be an ObjectId. Other than
that, I don't see much point to dynamic, reflection-based access
directly via code, as it seems to serve only to eliminate the need
to open ObjectIds to get DBObjects, but at an absurdly-expensive
cost, in terms of performance.
If you really insist on pursuing something that slow for use in code
(or just data binding), then you can create and cache a delegate for
accessing a member the first time the member is accessed, and use
the cached delegate on subsequent accesses, which will run a few
hundred times faster than straight reflection.
https://msmvps.com/blogs/jon_skeet/archive/2008/08/09/making-reflection-fly-and-exploring-delegates.aspxhttp://geekswithblogs.net/Madman/archive/2008/06/27/faster-reflection-using-expression-trees.aspxI had a look into System.Dynamic.DynamicObject, with a view to establish some dynamic functionality in AutoCAD 2012 (or at most 2011, since those dynamics require .NET 4.0). Getting an iterator in a foreach loop from the dynamic object seems to work: