如何确定结构中的值是否已更改?

时间:2009-06-12 20:01:02

标签: .net

我有两个相同类型的结构,字段由字符串组成。一个结构是“当前/已更改”状态,另一个结构是原始状态。

是否有一种简单的方法可以确定字段是否已经更改,而不是遍历每个字段并逐个进行比较?

4 个答案:

答案 0 :(得分:4)

定义getter和setter以与struct接口并维护“modified”标志。

否则,除了比较数据AFAIK之外,没有其他方法可以让您知道自上次读取以来内存内容是否发生了变化。

答案 1 :(得分:1)

我相信,对于相同类型的Structs,你可以进行严格的比较。 I.E.,IF(structA = strucB)然后......

不,我的坏。我在考虑VB6 ......

哦等等,在.NET中还有另一种方法:使用.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

答案 2 :(得分:1)

我会实现IComparable,然后进行字段比较。

答案 3 :(得分:0)

字符串是char数组的指针吗?如果是数组,则可以为sizeof(struct)执行memcmp。这仍然是一种蛮力,但至少它比一个一个地解除引用字段更有效。

如果字段是char指针并且字符串本身没有改变(因此字段指向“string1”或“string2”,但“string1”本身永远不会改变)memcmp也可以工作。否则你将不得不进行手动比较功能。

更新:之前我没有看到.net标签。我说的是简单的C,我不知道.net,所以这可能不适用。