.net 如何确定结构中的值是否已更改?
我有两个相同类型的结构,字段由字符串组成。一个结构是“当前/更改”状态,另一个是原始状态.net 如何确定结构中的值是否已更改?,.net,.net,我有两个相同类型的结构,字段由字符串组成。一个结构是“当前/更改”状态,另一个是原始状态 除了遍历每个字段并逐个比较外,是否有一种简单的方法来确定字段是否已更改?定义getter和setter以与结构接口并维护“修改”标志 否则,除了比较AFAIK中的数据外,您没有现成的方法可以知道自上次读取以来内存内容是否发生了更改。定义getter和setter与结构接口并维护“修改”标志 否则,除了对数据进行比较外,没有现成的方法可以让您知道自上次读取以来内存内容是否发生了变化。我相信,对于相同类型的结构
除了遍历每个字段并逐个比较外,是否有一种简单的方法来确定字段是否已更改?定义getter和setter以与结构接口并维护“修改”标志
否则,除了比较AFAIK中的数据外,您没有现成的方法可以知道自上次读取以来内存内容是否发生了更改。定义getter和setter与结构接口并维护“修改”标志
否则,除了对数据进行比较外,没有现成的方法可以让您知道自上次读取以来内存内容是否发生了变化。我相信,对于相同类型的结构,您只需进行一次严格的比较即可。也就是说,如果(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
我相信,对于相同类型的结构,您可以进行严格的比较。也就是说,如果(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
字符串是字符数组的字符指针吗?如果是数组,可以对sizeof(struct)执行memcmp。这仍然是一种蛮力,但至少它比逐个解引用字段更有效 如果字段是字符指针,字符串本身不改变(因此字段指向“string1”或“string2”,但“string1”本身永远不会改变),那么memcmp也可以工作。否则,您将不得不进行手动比较功能
更新:我以前没有看到.net标记。我说的是纯C,我不知道.net,所以这可能不适用。字符串是字符数组的字符指针吗?如果是数组,可以对sizeof(struct)执行memcmp。这仍然是一种蛮力,但至少它比逐个解引用字段更有效 如果字段是字符指针,字符串本身不改变(因此字段指向“string1”或“string2”,但“string1”本身永远不会改变),那么memcmp也可以工作。否则,您将不得不进行手动比较功能
更新:我以前没有看到.net标记。我说的是普通C,我不知道.net,所以这可能不适用。我将实现IComparable,然后进行字段比较。我将实现IComparable,然后进行字段比较