【问题标题】:Adding new object to generit List overwrites previous values将新对象添加到通用列表会覆盖以前的值
【发布时间】:2010-07-15 14:23:41
【问题描述】:

我对由我创建的类的实例组成的通用列表有疑问。我很惊讶,每次我向列表中添加一个新对象时,它都会覆盖以前的条目。这是一个代码示例,我简直不敢相信。我正在使用 Visual Studio 2010:

Dim translations As List(Of TranslatedValue) = New List(Of TranslatedValue)
If Session("ctlTexts") Is Nothing Then
    Dim reader As IDataReader = DataAccessFunctions.db.GetDataReader("SELECT [ControlID], [ControlTextEN], [ControlTextDE], [ControlTextBG] FROM [dbo].[tbLanguage]", GetConnectionString)

    While reader.Read()
        Dim translationBulgarian As String = String.Empty
        Dim translationGerman As String = String.Empty
        Dim translationEnglish As String = String.Empty
        Dim translationKey As String = String.Empty
        Dim currentLanguageTranslation As String = String.Empty

        If Not reader.IsDBNull(0) Then
            translationKey = reader("ControlID")
        End If
        If Not reader.IsDBNull(1) Then
            translationEnglish = reader("ControlTextEN")
        End If
        If Not reader.IsDBNull(2) Then
            translationGerman = reader("ControlTextDE")
        End If
        If Not reader.IsDBNull(3) Then
            translationBulgarian = reader("ControlTextBG")
        End If

        Select Case CurrentLanguage
            Case Language.Bulgarian
                currentLanguageTranslation = translationBulgarian
            Exit Select
            Case Language.English
                currentLanguageTranslation = translationEnglish
            Exit Select
            Case Language.German
                currentLanguageTranslation = translationGerman
            Exit Select
        End Select

        translations.Add(New TranslatedValue(translationKey, translationEnglish, translationGerman, translationBulgarian, currentLanguageTranslation))
    End While
reader.Close()
Session("ctlTexts") = translations

【问题讨论】:

    标签: .net vb.net collections


    【解决方案1】:

    从根本上说,您必须问自己:List(of T) 如何知道如何比较两个 TranslatedValue。

    【讨论】:

    • 对我来说,听起来你最好使用 Dictionary(Of T)
    • @dkson - Dictionary(Of T) 将要求每个条目通过某个键是唯一的。这至少会告诉你是否有碰撞。
    • @Joel - 我只是看不出代码是如何工作的,因为他显然正在向列表中添加新对象。
    • @dkson - 我同意这似乎是应该发生的事情,但如果这不是他看到的结果,显然不是。根据该信息,我不得不同意尝试使用字典有助于消除比较问题的可能性。
    • @Joel 我认为如果你知道如何使用调试器,这类问题很容易解决
    【解决方案2】:

    我太傻了! :) 我已经在我的班级中声明了静态私有成员 :) 很抱歉打扰您,感谢您的回复!

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多