我有两个相同类型的结构,字段由字符串组成。一个结构是“当前/已更改”状态,另一个结构是原始状态。
是否有一种简单的方法可以确定字段是否已经更改,而不是遍历每个字段并逐个进行比较?
答案 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,所以这可能不适用。