比较两个结构的值在C# [英] Compare two structs' values in C#
问题描述
我不是在寻找返回bool的两个结构的比较,我想知道是否有一种方法来获得两个结构(相同的结构,但可能不同的值)的不同的字段。基本上我想要一个更简单的方法来做以下:
I'm not looking for a comparison of two structs that returns bool, I am wondering if there is a way to get which fields of two structs (the same structure, but maybe different values) are different. Basically I want a simpler way to do the following:
public class Diff
{
public String VarName;
public object Val1;
public object Val2;
public Diff(String varName, object val1, object val2)
{
VarName = varName;
Val1 = val1;
Val2 = val2;
}
public override string ToString()
{
return VarName + " differs with values " + Val1 + " and " + Val2;
}
}
public struct TestStruct
{
public int ValueOne;
public int ValueTwo;
public int ValueThree;
public List Compare(TestStruct inTestStruct)
{
List diffs = new List();
if (ValueOne != inTestStruct.ValueOne)
{
diffs.Add(new Diff("ValueOne", ValueOne, inTestStruct.ValueOne));
}
if (ValueTwo != inTestStruct.ValueTwo)
{
diffs.Add(new Diff("ValueTwo", ValueTwo, inTestStruct.ValueTwo));
}
if (ValueThree != inTestStruct.ValueThree)
{
diffs.Add(new Diff("ValueThree", ValueThree, inTestStruct.ValueThree));
}
return diffs;
}
}
public CompareStructsExample()
{
TestStruct t1 = new TestStruct();
t1.ValueOne = 1;
t1.ValueTwo = 8;
t1.ValueThree = 5;
TestStruct t2 = new TestStruct();
t2.ValueOne = 3;
t2.ValueTwo = 8;
t2.ValueThree = 7;
List diffs = t1.Compare(t2);
foreach (Diff d in diffs)
{
System.Console.WriteLine(d.ToString());
}
}
我想知道是否有办法这与一些序列化,或者如果这是唯一的方式来实际查看哪些值已更改。即使有一个更好的方法来实现Compare函数,我也会这么做。
I'm wondering if there is a way to do this with serialization of some sort, or if this is the only way to actually see which values have changed. Even if there is a better way to implement the Compare function, I would take that too.
推荐答案
。检查 FieldInfo 和 PropertyInfo 示例。
MSDN示例(修改一下):
MSDN example (modified a bit):
Type myType = typeof(TestStruct);
// Get the fields of TestStruct.
FieldInfo[] myFieldInfo =
myType.GetFields(
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
Console.WriteLine("\nThe fields of TestStruct are \n");
// Display the field information of TestStruct.
for(int i = 0; i < myFieldInfo.Length; i++)
{
Console.WriteLine("\nName : {0}", myFieldInfo[i].Name);
Console.WriteLine("Declaring Type : {0}", myFieldInfo[i].DeclaringType);
Console.WriteLine("IsPublic : {0}", myFieldInfo[i].IsPublic);
Console.WriteLine("MemberType : {0}", myFieldInfo[i].MemberType);
Console.WriteLine("FieldType : {0}", myFieldInfo[i].FieldType);
Console.WriteLine("IsFamily : {0}", myFieldInfo[i].IsFamily);
}
这篇关于比较两个结构的值在C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!