T EntityOf <T>(CXCursor cursor, Func <T> creator) where T : Entity { Entity e; var key = new CursorKey(cursor); if (_CursorToEntity.TryGetValue(key, out e)) { var t = e as T; if (t == null) { throw new ApplicationException(string.Concat("\"", e.FullName, "\" class mismatch: ", e.GetType().Name, " vs ", typeof(T).Name)); } return(t); } else { var t = _EntityBinder.Entity <T>(cursor, creator); if (t == null) { return(null); } t.Depth = _Depth; _CursorToEntity.Add(key, t); return(t); } }