Sorry if I offend you, this was not at all my intention (appologies for my poor English too).
The TryCast() method try to cast the DBObject returned by GetObject() in the specified type (Curve) and returns Nothing if the cast fails.
Then this is checked with the "IsNot Nothing" expression:
If ent IsNot Nothing AndAlso ent.ExtensionDictionary.IsValid Then
This works fine for me and correct the 'bug' I reported.
If you still have a problem, please tell how it occurs (which command is running and what you're doing in the autoCAD Editor) and which code line fires the exception.
About Dictionaries, they're usefull to store data within the Database (NOD children) or within a DBObject (extension dictionaries). These data will be available after closing and re-opening the drawing.
Another way (cheaper because the entity type is checked befor opening it) is to use the ObjectId.ObjectClass property:
Public Sub MyInputMonitor(ByVal sender As Object, ByVal e As PointMonitorEventArgs)
' first lets check what is under the Cursor
Dim fullEntPath() As FullSubentityPath = e.Context.GetPickedEntities()
' create a RXClass instance for the Curve class
Dim curveClass As RXClass = RXClass.GetClass(GetType(Curve))
' check if there's something under the cursor and if it's derived from Curve
If fullEntPath.Length > 0 AndAlso _
' start a transaction
Dim trans As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction
' open the Entity for read, we already know it's a Curve
Dim ent As Curve = trans.GetObject(fullEntPath(0).GetObjectIds(0), OpenMode.ForRead)
' ok, so if we are over something - then check to see if it has an extension dictionary
If (ent.ExtensionDictionary.IsValid) Then