【问题标题】:foreach statement cannot operate on variables of type 'gerant' because 'gerant' does not contain a public definition for 'GetEnumerator'foreach 语句不能对“gerant”类型的变量进行操作,因为“gerant”不包含“GetEnumerator”的公共定义
【发布时间】:2016-03-27 16:46:47
【问题描述】:

你好,我尝试创建一个名为“gerant”的对象

 class gerant
{
    public double CIN_GERANT, NUM_TEL_GERANT, MOBILE_GERANT;
    public string NOM_GERANT, PRENOM_GERANT, ADRESSE__GERANT, MAIL_GERANT, VILLE_GERANT;
    public int CP_GERANT;
    public DateTime DATE_GERANT;

    public gerant(double _Cin_gerant, string _Nom_Gerant, string _Prenom_Gerant, string _Adresse_Gerant, double _Num_Tel_Gerant, string _Mail_Gerant, double _Mobile_Gerant, int _cp_gerant, string _ville_gerant, DateTime _date_gerant)
    {
        this.CIN_GERANT = _Cin_gerant;
        this.NOM_GERANT = _Nom_Gerant;
        this.PRENOM_GERANT = _Prenom_Gerant;
        this.ADRESSE__GERANT = _Adresse_Gerant;
        this.NUM_TEL_GERANT = _Num_Tel_Gerant;
        this.MAIL_GERANT = _Mail_Gerant;
        this.MOBILE_GERANT = _Mobile_Gerant;
        this.CP_GERANT = _cp_gerant;
        this.VILLE_GERANT = _ville_gerant;
        this.DATE_GERANT = _date_gerant;
    }

    public gerant getinfogerant()
    {
        gerant gerer = null;
        string sql_gerant = "select CIN,NOM,PRENOM,ADRESS_PERSONNEL,NUM_TEL,MAIL,MOBILE,CP_GERANT,VILLE_GERANT,DATE_CIN from GERANT";
        connexion connect = new connexion();
        OleDbConnection connection = connect.getconnexion();
        // try
        //{
        connection.Open();
        OleDbCommand cmd = new OleDbCommand(sql_gerant, connection);
        OleDbDataReader reader = cmd.ExecuteReader();
        if (reader.Read())
        {
            gerer = new gerant(reader.GetDouble(0),
                reader.GetString(1),
                reader.GetString(2),
                reader.GetString(3),
            reader.GetDouble(4),
                reader.GetString(5),
                reader.GetDouble(6),
                reader.GetInt32(7),
                reader.GetString(8),
                reader.GetDateTime(9)
                );

        }
        connection.Close();
        return gerer;

    }
}

但是当我尝试用 gerant 填充我的组合框时,我尝试插入此代码

 foreach(Modele.gerant ligne in liste_gerant)
        {

        }

但我为我犯了这个错误 foreach 语句不能对“gerant”类型的变量进行操作,因为“gerant”不包含“GetEnumerator”的公共定义

我该如何解决?

【问题讨论】:

  • 什么是Modele.gerant?它是一个类还是一个领域?它的类型是什么? liste_gerant 是什么?它是一个类还是一个领域?它的类型是什么?
  • liste_gerant 是如何定义的?
  • 您的 getinfogerant 正在返回单个对象,如果您尝试将其用于组合框下拉菜单。
  • 需要在liste_gerant上实现IEnumerable接口。如果您希望我们帮助您,您需要发布liste_gerant 的定义。
  • getinfogerant 仅返回单个项目,而不是列表,因此您无法对其进行迭代。这是没有意义的,因为它只有一项,你不需要 for-each。

标签: c# foreach public


【解决方案1】:

基于您的 cmets。 gerant 类不是任何类型的集合,并且您的 getinfogerant 不会返回集合。

所以,问题在于您试图迭代单个值。

【讨论】:

    【解决方案2】:

    根据您在 getinfogerant 中使用的查询,我猜您希望它在您的数据库中获取所有“gerant”,而不仅仅是一个?

    但是现在您只是返回第一个。您应该将其返回类型更改为 List 并将 if (reader.Read()) 转换为 while 循环以填充列表,然后在最后返回整个列表。

    【讨论】:

    • 是的,这就是我如何获得所有“gerant”: public List getinfogerant() { List gerer = new List(); OleDbDataReader 阅读器 = cmd.ExecuteReader(); while(reader.Read()) { gerer.Add(new gerant(reader.GetDouble(0),reader.GetString(1),reader.GetString(2), reader.GetString(3),reader.GetDouble(4) , reader.GetString(5),reader.GetDouble(6), reader.GetInt32(7), reader.GetString(8), reader.GetDateTime(9))); } 返回格勒; }
    • 但是如何将数据库中的第一行添加为组合框中出现的默认值?
    • 我记得组合框有一个 selectedindex 属性,您可以将其设置为 0,或者您可以将 selectedvalue 属性设置为列表的第一项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多