title: How can I copy object types in VB.NET?
body: <p>I am building an ASP.NET application that needs dynamic tables. That's another issue that I've already posted about (and gotten a pretty good response!). Now, I'm running into another issue - I want to add new rows to my table, but given that I will have 10-12 tables on one page, each containing different objects in their rows (text boxes, check boxes, etc.) I need a way of simply generically adding a new row that has the same objects as the first row in the table. Here's my code:</p>
  
  <pre><code>Private Sub AddTableRow(ByRef originalTable As System.Web.UI.WebControls.Table)
  
          Dim originalRow As System.Web.UI.WebControls.TableRow = originalTable.Rows(1)
          Dim insertingRow As New System.Web.UI.WebControls.TableRow
          Dim insertingCells(originalRow.Cells.Count) As System.Web.UI.WebControls.TableCell
          Dim index As Integer = 0
  
          For Each cell As System.Web.UI.WebControls.TableCell In originalRow.Cells
  
              insertingCells(index) = New System.Web.UI.WebControls.TableCell
              insertingCells(index).Controls.Add(cell.Controls.Item(0))
  
              index += 1
          Next
  
          insertingRow.Cells.AddRange(insertingCells)
  
          originalTable.Rows.Add(insertingRow)
  
      End Sub
  </code></pre>
  
  <p>But I'm getting a null reference exception at the second to last line,</p>
  
  <p>insertingRow.Cells.AddRange(insertingCells)</p>
  
  <p>...and I can't figure out why. Is it because the contents of each cell are not being initialized with a new object? If so, how would I get around this?</p>
  
  <p>Thanks!</p>
  
  <p>EDIT:</p>
  
  <p>The inside of my for loop now looks like this - </p>
  
  <pre><code>For Each cell As System.Web.UI.WebControls.TableCell In originalRow.Cells
          Dim addedContent As New Object
          Dim underlyingType As Type = cell.Controls.Item(0).GetType
  
          addedContent = Convert.ChangeType(cell.Controls.Item(0), underlyingType)
          insertingCells(index) = New System.Web.UI.WebControls.TableCell
          insertingCells(index).Controls.Add(addedContent)
  
          index += 1
  Next
  </code></pre>
  
  <p>Stepping through with a debugger, I see that this strategy is working - but the additional table row still doesn't appear...and still does when I do this statically.</p>