【问题标题】:.GetType().GetProperties() returns properties in different order.GetType().GetProperties() 以不同的顺序返回属性
【发布时间】:2015-10-27 10:09:48
【问题描述】:

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

非常感谢您的帮助。

【问题讨论】:

  • 按字母顺序排列字段名称?

标签: c# properties system.reflection getproperties


【解决方案1】:

你不能对Type.GetProperties的返回值的顺序做任何假设,看看documentation是怎么说的:

GetProperties 方法不返回特定的属性 顺序,例如字母顺序或声明顺序。您的代码不得 取决于返回属性的顺序,因为 顺序不同。

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

【讨论】:

  • @SHeePYTaGGeRNeP 您应该将此答案视为已接受。
猜你喜欢
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多