【问题标题】:How to reuse an array in asp.net vb如何在 asp.net vb 中重用数组
【发布时间】:2025-11-25 03:35:01
【问题描述】:

我必须建立一个网页和语言表,即第 1 页:en it de 在一个最多可以有 14 种语言的模式中。页面内容保存在数据库中。因此,要构建表格,我正在执行以下操作:

Dim rowArrayList As New ArrayList
Dim thisRow(languageNum) As String 'languageNum equates to number of columns -1

然后访问数据库:

'# Create row array of cell arrays
If pageName <> lastPageName Then
    lastPageName = pageName
    If j >= languageNum Then
        rowArrayList.Add(thisRow)
        Array.Clear(thisRow, 0, thisRow.Length)
        j = 0
    End If
    thisRow(0) = "<td class=""pageName"">" & pageName & "</td>"
End If

'# Iterate each cell in the row
For i As Integer = 1 To languageNum - 1
    If thisRow(i) = "" Then
        If transReady = False And active = False Then
            thisRow(i) = "<td class=""trans""><a href=""content/page-text.aspx?pageID=" & SQLReader("DAEPageContentControlID").ToString() & "&lang=" & langISO & """>" & langISO & "</a></td>"
        ElseIf transReady = True And active = False Then
            thisRow(i) = "<td class=""notActive""><a href=""content/page-text.aspx?pageID=" & SQLReader("DAEPageContentControlID").ToString() & "&lang=" & langISO & """>" & langISO & "</a></td>"
        ElseIf transReady = True And active = True And i = thisLangID Then
            thisRow(i) = "<td class=""active""><a href=""content/page-text.aspx?pageID=" & SQLReader("DAEPageContentControlID").ToString() & "&lang=" & langISO & """>" & langISO & "</a></td>"
        End If
    End If
    j = j + 1
Next

建表:

'# Build output table
For Each row As String() In rowArrayList
    tableBody.Text += "<tr>"

    For Each cell As String In row
        If cell = "" Then
            tableBody.Text += "<td class=""notTrans"">&nbsp;</td>"
        Else
            tableBody.Text += cell
        End If
    Next

    tableBody.Text += "</tr>"
Next

表格显示得很漂亮,但每一行都包含最后一行的数据。如何修复它,以便每个 thisRow 在 rowArrayList 中都是唯一的?目前,每次将 thisRow 添加到 rowArrayList 时,都会覆盖每个 rowArrayList 索引,而不仅仅是添加的那个。

【问题讨论】:

  • 这是标记为 ASP.NET 那么为什么不使用像 RepeaterGridView 这样的 ASP.NET 控件,而不是手动创建 html?
  • 不要在 .Net 中使用 ArrayList 类型。 Ever. 在这种情况下,明显的替换是 List(Of String())

标签: asp.net arrays vb.net arraylist


【解决方案1】:

为了快速修复,而不是这样:

Array.Clear(thisRow, 0, thisRow.Length)

这样做:

thisRow = New String(languageNum) {}

或者这个:

ReDim thisRow(languageNum)

但是,我怀疑您可以更改一些简单的设计选择,从而彻底改变此代码。

【讨论】:

  • 他需要使用字符串生成器。我刚刚做了这样的事情,我会写一个答案
  • 可能有一些设计选择,但如果您不了解这些选择,您将无法做出选择。 “或这个:”部分似乎对我有用。非常感谢:)
  • @Craig 很划算。 Google 在 VB.net 和代码优化技术中使用 stringbuilder 的原因。字符串生成器可以显着提高性能。
  • 丢弃旧数组或列表并重新创建一个新数组通常比.Clear 它更快。并且为 StringBuilder 类 +1。字符串是不可变的。
  • 谢谢大家,这只是对管理系统中很少使用的部分中的一些旧代码的快速重构,因此性能不是问题。刚刚阅读了有关 C# 哈希集的信息,如果它是一个 C# 项目,我可能会使用它,尽管 stringbuilders 可能是一个选项。再次感谢。