從http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx:
的的GetProperties方法不以特定的順序返回的屬性,如字母或聲明順序。您的代碼不得依賴於返回屬性的順序,因爲順序會有所不同。
如果順序很重要,也許你應該嘗試排序結果?
更新自定義排序
這會增加一些複雜性,但您可以添加自定義排序次序使用屬性的結果。首先,創建自定義屬性SortOrderAttribute
:
[AttributeUsage(AttributeTargets.Property)]
public sealed class SortOrderAttribute : Attribute
{
private int _sortOrder;
public SortOrderAttribute(int sortOrder)
{
_sortOrder = sortOrder;
}
}
下適用該屬性對你的類屬性:
public class Foo
{
[SortOrder(1)]
public int Bar { get; set; }
[SortOrder(2)]
public string Name { get; set; }
}
然後作爲IComparer:
public class PropertyInfoComparer : IComparer<PropertyInfo>
{
public int Compare(PropertyInfo a, PropertyInfo b)
{
return a.GetCustomAttributes(typeof(SortOrderAttribute), false)[0] - b.GetCustomAttributes(typeof(SortOrderAttribute), false)[0];
}
}
最後,得到的分類列表:
public PropertyInfo[] SortedList()
{
PropertyInfo[] properties = typeof(Foo).GetProperties();
Array.Sort(properties, new PropertyInfoComparer());
return properties;
}
如果你發佈了一些代碼,它會更容易理解 – 2012-03-14 15:08:42
如果一件事不能保證任何一種秩序,那麼你很難期待它,並進一步依靠它來做到這一點。 – 2012-03-14 15:09:35
我不能回答你的問題,但這是一個定義的方法的行爲,在這裏描述:http://msdn.microsoft.com/de-de/library/kyaxdd3x.aspx – 2012-03-14 15:10:42