C# .GetType().GetProperties()以不同的顺序返回属性
我想检查我们的配置文件,看看它是否与创建新配置文件相同。此方法称为GetConfig() 几个小时后,我注意到如果我保存配置文件,然后调用GetConfig,它就会工作,但是如果我关闭程序,启动它,加载配置文件,然后调用GetConfig(),它会以不同的顺序返回属性 下面您可以看到我的意思,propertyb是类的对象。有3个以上的属性,但我只想举一个小例子:C# .GetType().GetProperties()以不同的顺序返回属性,c#,properties,system.reflection,getproperties,C#,Properties,System.reflection,Getproperties,我想检查我们的配置文件,看看它是否与创建新配置文件相同。此方法称为GetConfig() 几个小时后,我注意到如果我保存配置文件,然后调用GetConfig,它就会工作,但是如果我关闭程序,启动它,加载配置文件,然后调用GetConfig(),它会以不同的顺序返回属性 下面您可以看到我的意思,propertyb是类的对象。有3个以上的属性,但我只想举一个小例子: - - - - - - - - -- - - - - - -- S A V E C O N F I G - - - - -
- - - - - - - - -- - - - - - -- 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
非常感谢您的帮助。您不能对
类型的返回值的顺序做出任何假设。GetProperties
,请参见下面的说明:
GetProperties方法不返回特定类型中的属性
顺序,如字母顺序或声明顺序。您的代码不能
取决于返回属性的顺序,因为
顺序各不相同
如果您想要一个特定的顺序,您应该对返回的集合进行代码排序。按字母顺序排列字段名?@SHEePYTaGGeRNeP您应该将此答案作为已接受答案。
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);