.NET
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Does not contain a public definition for 'GetEnumer ator'
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi all,
While I tried to start a loop on a selection set object as below,
foreach (AcadObject SelDrawingObject1 in GenSelSSetObj)
I get an error as below,
foreach statement cannot operate on variables of type 'Autodesk.AutoCAD.Interop.Common.AcadObject' because 'Autodesk.AutoCAD.Interop.Common.AcadObject' does not contain a public definition for 'GetEnumerator'
Please help me with changes required to fix this.
Solved! Go to Solution.
Re: Does not contain a public definition for 'GetEnumer ator'
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Try use AcadEntity instead ,in example, this one is from my oldies
<CommandMethod("DISC", CommandFlags.Modal Or CommandFlags.Session)> _
Public Sub InteropDemo()
Dim miss As Object = Type.Missing
Dim AcadApp As AcadApplication = New Autodesk.AutoCAD.Interop.AcadApplication()
AcadApp.Visible = True
AcadApp.WindowState = AcWindowState.acMax
Dim adoc As AcadDocument = AcadApp.Documents.Open("c:\test\WorkingDrawing.dwg ")
adoc.Application.ZoomExtents()
Dim util As AcadUtility = adoc.Utility
Dim oSset As AcadSelectionSet = adoc.SelectionSets.Add("mySset")
' get current tab name
Dim layout As Object = adoc.GetVariable("ctab")
' using filter
' important: use short[] for dxf codes:
Dim dxfcode As Short() = New Short() {0, 66, 410}
' use object[] for dxf values:
Dim dxfvalue As Object() = New Object() {"insert", 1, layout}
' select all attributed block instances in the current tab
oSset.Select(AcSelect.acSelectionSetAll, miss, miss, DirectCast(dxfcode, Object), DirectCast(dxfvalue, Object))
' send message to the command line:
adoc.Utility.Prompt(String.Format(vbLf & "Selected: {0} objects", oSset.Count))
For Each ent As AcadEntity In oSset
' important: cast if AcadEntity is AcadBlockReference
Dim oblkRef As AcadBlockReference = TryCast(ent, AcadBlockReference)
If oblkRef IsNot Nothing Then
' send message to the command line:
util.Prompt(String.Format(vbLf & "Block Name:" & vbTab & "{0}", oblkRef.Name))
Dim attVar As Object = oblkRef.GetAttributes()
' important: cast if object is array
If attVar.GetType().IsArray Then
Dim attColl As Object() = TryCast(DirectCast(attVar, Object()), Object())
If attColl IsNot Nothing Then
For i As Integer = attColl.GetLowerBound(0) To attColl.GetUpperBound(0)
' important: cast if object is AcadAttributeReference
Dim attRef As AcadAttributeReference = TryCast(attColl(i), AcadAttributeReference)
If attRef IsNot Nothing Then
' send message to the command line:
util.Prompt(String.Format(vbLf & "Tag: {0}" & vbTab & "Value: {1}", attRef.TagString, attRef.TextString))
End If
Next
End If
End If
End If
Next
End Sub
Change file name etc to your needs
~'J'~
C6309D9E0751D165D0934D0621DFF27919
Re: Does not contain a public definition for 'GetEnumer ator'
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hallex,
Thanks for you code.
I changed the type from AcadObject to AcadEntity below and also GenSelSSetOb type to AcadSelectionSet
foreach(AcadEntity SelDrawingObject1 in GenSelSSetObj)
Fixed!
Re: Does not contain a public definition for 'GetEnumer ator'
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Good for you
Glad I could help
Cheers ![]()
~'J'~
C6309D9E0751D165D0934D0621DFF27919
