【问题标题】:Read string list with a lot of elements C#读取包含大量元素的字符串列表 C#
【发布时间】:2015-02-24 09:03:47
【问题描述】:

我想阅读(该列表中的所有数据),但我不知道如何在 C# 中进行阅读

        //Create a list to store the result
        List<string>[] list = new List<string>[2];
        list[0] = new List<string>();
        list[1] = new List<string>();

        //Open connection
        if (mysql.OpenConnection() == true)
        {
            //Create Command
            MySqlCommand cmd = new MySqlCommand(query, mysql.connection);
            //Create a data reader and Execute the command
            MySqlDataReader dataReader = cmd.ExecuteReader();

            //Read the data and store them in the list
            while (dataReader.Read())
            {
                list[0].Add(dataReader["filename"] + "");
                list[1].Add(dataReader["hash"] + "");
            }

            //close Data Reader
            dataReader.Close();

            //close Connection
            mysql.CloseConnection();

            //return list to be displayed
            return list;
        }

如果有人知道可以从该 mysql 选择中创建数组,例如 2 index {“filename”,“hash”}。在 PHP 中,我只需 $array["filename"] = FILENAME;等等

我想在 foreach 循环中将这些数据读取为 dataReader["filename"]

【问题讨论】:

    标签: c# mysql arrays foreach


    【解决方案1】:

    您可以创建一个集合,例如创建一个集合,而不是创建多个列表并尝试通过它们的索引来同步数组。 List&lt;Tuple&lt;string, string&gt;&gt;List&lt;SomeEntity&gt; 对行的所有字段进行建模,其中 SomeEntity 是一个简单的 POCO 类,对来自查询的一行数据进行建模。

    例如创建一个新的 POCO 类来为行建模:

    public class FileNameHash 
    {
       public string FileName {get; set;}
       public string Hash {get; set;}
       // Other fields in your query here
    }
    

    ...并修改您的获取代码

    //Create a list to store the result
    var list = new List<FileNameHash>();
    
    using (var mysql = new MySqlConnection(connectionString))
    using (var cmd = new MySqlCommand(query, mysql.connection))
    using (var dataReader = cmd.ExecuteReader())
    {
       if (mysql.OpenConnection() == true)
       {
          //Read the data and store them in the list
          while (dataReader.Read())
          {
              list.Add(new FileNameHash
              {
                FileName = (string)dataReader["filename"],
                Hash = (string)dataReader["hash"]
                // .. Other fields here
              });
          }
          return list;
        }
    }
    

    其他:

    • 通过将IDisposableConnectionCommandDataReader 包装在一个 using 中,可以避免忘记关闭/释放所有路径中的资源(包括异常)的问题。
    • 向对象添加空字符串以强制转换为字符串并不是一个好主意 IMO - 明确地进行强制转换。

    【讨论】:

      【解决方案2】:

      不确定我是否明白您的问题,但我认为您已经很接近了:您可以使用以下方法遍历您的文件名:

      foreach(string filename in list[0])
      

      您可以使用以下方法迭代您的哈希:

      foreach(string hash in list[1])
      

      您可以通过不将这两个列表放在一个数组中来简化您的代码,即只需使用:

      List<string> filenames = new List<string>();
      List<string> hashes = new List<string>();
      

      【讨论】:

        【解决方案3】:

        首先创建模型类:

        Public class FileAndHashCode
        {
            public string name {get;set}
            public string hashCode{get;set}
        }
        

        然后创建一个方法:

        Public List<FileAndHashCode> getFileAndhashcode()
           {
               \\...
               List<FileAndHashCode> temp=new List<FileAndHashCode>();
               while (dataReader.Read()) 
               { 
                   temp.add(new 
                    FileAndHashCode{name=dataReader["fileName"].ToString()+" " , hashCode=dataReader["hash"].ToString()+" "});
               }
               return temp;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-17
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          • 2010-10-04
          • 2017-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多