2009-06-12 9 views

Répondre

1

Je crois que pour Structs du même type, vous pouvez juste comparer un striaght. I.E., IF (structA = strucB) alors ...

Non, mon mauvais. Je pensais à VB6 ...

Oh, attends, il y a une autre façon de le faire dans .NET: en utilisant la méthode .Equals.

Public Class TestVBClass 
Structure pnt 
    Dim X As Single 
    Dim Y As Single 
    Dim Name As String 
End Structure 


Function CompareStructs() As Boolean 
    Dim a As pnt, b As pnt 

    With a 
     .X = 3.3 
     .Y = 1.1 
     .Name = "first" 
    End With 
    With b 
     .X = 13.3 
     .Y = 11.1 
     .Name = "second" 
    End With 
    MsgBox("Test1 = " & (a.Equals(b)), MsgBoxStyle.OkOnly) 

    With b 
     .X = 3.3 
     .Y = 1.1 
     .Name = "first" 
    End With 
    MsgBox("Test2 = " & (a.Equals(b)), MsgBoxStyle.OkOnly) 
End Function 
End Class 
4

Définissez les getters et les setters pour qu'ils interfacent avec votre structure et maintiennent un drapeau "modified". Sinon, il n'y a pas de moyen facile de savoir si le contenu de la mémoire a changé depuis la dernière fois que vous l'avez lu, autre que de comparer les données AFAIK.

0

Les chaînes sont-elles des pointeurs char des tableaux char? Si c'est des tableaux, vous pouvez faire un memcmp pour le sizeof (struct). C'est encore une sorte de force brute, mais au moins c'est plus efficace que de déréférencer les champs un par un. Si les champs sont des pointeurs char et les chaînes elles-mêmes ne changent pas (donc le champ pointe vers "string1" ou "string2", mais le "string1" lui-même ne changera jamais) le memcmp peut aussi fonctionner. Sinon, vous devrez faire une fonction de comparaison manuelle.

Mise à jour: Je n'ai pas vu le tag .net avant. Je parle de C simple, je ne sais pas. Net, donc cela pourrait ne pas s'appliquer.

1

Je voudrais implémenter IComparable, puis faire une comparaison de terrain.

Questions connexes