1

我想检查我们的配置文件,看看它是否与我要创建一个新的配置文件一样。此方法称为 GetConfig()。

几个小时后,我注意到如果我保存我的配置文件然后调用 GetConfig 它可以工作,但是如果我关闭程序启动它并加载我的配置文件并调用 GetConfig() 它会以不同的顺序返回我的属性。

您可以在下面看到我的意思,属性b是类的对象。属性不止3个,我只想举个小例子:

- - - - - - - - -- - - - - - --   S A V E   C O N F I G
 - - - - - - -- -   G E T   C O N F I G
1 Field: a
1 Field: b
1 Field: c

以及它必须保存的下一个配置对象。

1 Field: a
1 Field: b
1 Field: c

当我在同一个实例上加载配置时

 - - - -- - - - - - - - - -- -  A R E   E Q U A L
 - - - - - - -- -   G E T   C O N F I G
1 Field: a
1 Field: b
1 Field: c

下一个配置对象

1 Field: a
1 Field: b
1 Field: c

但是,当我重新启动程序时加载配置时,我得到了这个:

- - - -- - - - - - - - - -- -  A R E   E Q U A L
 - - - - - - -- -   G E T   C O N F I G
1 Field: a
1 Field: b   <-- correct
1 Field: c

第二个对象

1 Field: a
1 Field: c
1 Field: b   <-- should be 2nd.

因此,当我尝试比较两个配置文件时,它们不匹配。有人有这方面的经验吗?

foreach (var field in channel.GetType().GetProperties())
                    {
                        Console.WriteLine(channel.ChannelNumber + " Field: " + field.Name);

非常感谢您的帮助。

4

1 回答 1

3

您不能对 的返回值的顺序做出任何假设Type.GetProperties,请参阅文档中的内容:

GetProperties 方法不按特定顺序返回属性,例如字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。

如果你想要一个特定的顺序,你应该让你的代码顺序返回集合。

于 2015-10-27T10:21:01.753 回答