:master: Questo mi pare un poco meglio
anche se non sono ancora contento.

cs.Add(c, c) forse è meglio trasformarlo in cs.add(c), dato che sono uguali
forse si può fare con una List(of classe) utilizzando un altro aproccio

Comunque, grazie ancora dell'aiuto






codice:
Imports System.Collections
Imports Microsoft.VisualBasic.FileIO
Imports System.Collections.Generic
Imports System.Collections.Specialized


Module Module1

    Sub Main()
        'Dim cs As New Dictionary(Of Classe, Classe)(Classe.EqualityComparer)
        Dim cs As New Classi()
        Try
            Dim c As Classe = Nothing
            c = New Classe("a", "a") : cs.Add(c, c)
            c = New Classe("b", "a") : cs.Add(c, c)
            c = New Classe("B", "x") : cs.Add(c, c) 'non posso farlo


        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub

End Module

Public Class Classe
    Public A As String
    Public B As String

    Public Sub New(ByVal a As String, ByVal b As String)
        Me.A = a
        Me.B = b
    End Sub


End Class


Public Class Classi
    Inherits Dictionary(Of Classe, Classe)

    Public Sub New()
        MyBase.New(New EqualityComparer())
    End Sub

    Private Class EqualityComparer
        Implements IEqualityComparer(Of Classe)

        Public Function Equals1(ByVal x As Classe, ByVal y As Classe) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of Classe).Equals
            Return String.Equals(x.A, y.A, StringComparison.OrdinalIgnoreCase)
        End Function

        Public Function GetHashCode1(ByVal obj As Classe) As Integer Implements System.Collections.Generic.IEqualityComparer(Of Classe).GetHashCode
            Return obj.A.ToLower.GetHashCode
        End Function
    End Class


End Class