Type.GetProperties()是否保证PropertyInfo[]结果的特定顺序?

7
Type.GetProperties()是否保证其PropertyInfo[]结果的某种顺序?例如按属性名称字母顺序返回它们或按它们在代码中出现的顺序返回它们。还是顺序未定义的?
2个回答

13

来自MSDN

GetProperties方法不会按照特定的顺序返回属性,例如按字母顺序或声明顺序。您的代码不能依赖于属性被返回的顺序,因为该顺序是可变的。


2
糟糕!我一定是没有注意到那部分。提醒自己:在发布愚蠢的问题之前等待一天。 :) - Jonathon Watney
1
虽然看起来是一致的。我有一个测试应用程序,它使用GetProperties来定义和填充一个DataGridView,而且每次调用返回的类型和值总是匹配的。 - ChrisF
@ChrisF:它们是按任意顺序排列还是有一定的模式?如果说有什么规律的话,我认为它们应该按照在代码中出现的顺序排列。 - Jonathon Watney
3
我认为顺序取决于它们在程序集中出现的顺序;然而,由于它们在程序集中的顺序可能因为代码更改而在不同版本构建之间发生变化,MSDN明智地告诉你不要依赖于固定顺序。 - Mike Hofer
糟糕,我们需要按代码中声明的顺序排序。对于.NET而言,使用.GetProperty遵循该顺序至少没有问题,因为在循环返回属性并将其导出到文本文件中以便再次使用BCP导出到SQL-DB时,没有确定的顺序会带来痛苦。 - Anand
同样适用于GetFields顺序。实际上,在对SetFields函数进行几次调用后,GetFields顺序往往会发生变化。因此,使用SetFields方法最频繁更改的字段可能会排在前面。 - JBeurer

1

我认为你可以再次使用“PropertyInfo.MetadataToken”对数组进行排序,就像这样:

Array.Sort(propertyInfos, delegate(PropertyInfo first, PropertyInfo second)
  {
            return first.MetadataToken.CompareTo(second.MetadataToken);
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接