.GetType()。GetProperties()以不同的顺序返回属性

时间:2015-10-27 10:09:49

标签: c# properties system.reflection getproperties

我想查看我们的配置文件,看看它是否与创建新配置文件相同。此方法称为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);

非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

您无法对Type.GetProperties的返回值顺序做出任何假设,请参阅documentation所说的内容:

  

GetProperties方法不返回特定属性   订单,例如字母或声明订单。你的代码一定不能   取决于返回属性的顺序,因为那样   订单各不相同。

如果您需要特定订单,则应该让您的代码订购返回的集合。