在C#中使用PropertyInfo的奇怪问题

时间:2013-04-03 06:38:58

标签: c# .net reflection types

我有一个类似的课程:

public class CompanyData
    {
        # region Properties
        /// <summary>
        /// string CompanyNumber
        /// </summary>
        private string strCompanyNumber;    

        /// <summary>
        /// string CompanyName
        /// </summary>
        private string strCompanyName;

    [Info("companynumber")]
    public string CompanyNumber
    {
        get
        {
            return this.strCompanyNumber;
        }

        set
        {
            this.strCompanyNumber = value;
        }
    }

    /// <summary>
    /// Gets or sets CompanyName
    /// </summary>
    [Info("companyName")]
    public string CompanyName
    {
        get
        {
            return this.strCompanyName;
        }

        set
        {
            this.strCompanyName = value;
        }
    }

    /// <summary>
    /// Initializes a new instance of the CompanyData class
    /// </summary>
    public CompanyData()
    {
    }

    /// <summary>
    /// Initializes a new instance of the CompanyData class 
    /// </summary>
    /// <param name="other"> object company data</param>
    public CompanyData(CompanyData other)
    {
        this.Init(other);
    }

    /// <summary>
    /// sets the Company data attributes
    /// </summary>
    /// <param name="other">object company data</param>
    protected void Init(CompanyData other)
    {
        this.CompanyNumber = other.CompanyNumber;
        this.CompanyName = other.CompanyName;
    }

    /// <summary>
    /// Getting array of entity properties
    /// </summary>
    /// <returns>An array of PropertyInformation</returns>
    public PropertyInfo[] GetEntityProperties()
    {
        PropertyInfo[] thisPropertyInfo;

        thisPropertyInfo = this.GetType().GetProperties();

        return thisPropertyInfo;
    }

    }

读取csv文件并创建CompanyData对象的集合

在这个方法中,我试图获取属性和值:

private void GetPropertiesAndValues(List<CompanyData> resList)
{

        foreach (CompanyData resRow in resList)
        {

            this.getProperties = resRow.ExternalSyncEntity.GetEntityProperties();

            this.getValues = resRow.ExternalSyncEntity.GetEntityValue(resRow.ExternalSyncEntity);

         }
 }

问题是,对于第一个对象,GetEntityProperties()返回CompanyNumber作为数组中的第一个元素。对于剩余的对象,它返回CompanyName作为第一个元素。

为什么序列不一致?

问候。

1 个答案:

答案 0 :(得分:4)

Type.GetProperties()不会返回有序结果。

  
    

GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。

  

如果要使用有序/一致的结果,最好对返回的数组进行排序。