簡體   English   中英

將列表轉換為C#中的數組

[英]Convert list to array in c#

我有這個代碼

[WebMethod]
    public static Array[] getStd()
    {        
      List<student> std = new List<student>();

      string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
      SqlConnection con = new SqlConnection(mystr);
      SqlCommand cmd = new SqlCommand("select * from student");
      con.Open();
      SqlDataAdapter da = new SqlDataAdapter(cmd);
      DataSet ds = new DataSet();
      da.Fill(ds);
      DataTable dt = ds.Tables[0];           

      foreach (DataRow item in dt.Rows)
      {
          student st = new student();
          st.name = item["name"].ToString();
          st.address = item["address"].ToString();
          st.sex = item["sex"].ToString();
          st.email = item["email"].ToString();

          std.Add(st);
          student[] arr = std.ToArray();          
      }    
   }

我想將此列表轉換為數組,然后最終返回數組。 我該如何實現?

還是有其他方法可以在不使用列表的情況下獲得相同的結果?

這是您的代碼更簡潔的等效代碼,它可以更快地運行並且占用更少的內存:

[WebMethod]
public static Student[] GetStudents()
{        
    String connectionString = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
    using(SqlConnection con = new SqlConnection(connectionString))
    using(SqlCommand cmd = con.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM [student]";
        con.Open();

        List<Student> ret = new List<Student>();

        using(SqlDataReader rdr = cmd.ExecuteReader())
        {
            while(rdr.Read())
            {
                ret.Add( new Student() {
                    Name = rdr.GetString("Name"),
                    Address = rdr.GetString("Address"),
                    Sex = rdr.GetString("Sex"),
                    Email = rdr.GetString("Email")
                } );
            }//while
        }//using

        return ret.ToArray();
    }//using 
}//GetStudents

您可以使用Linq,那樣會更快

[WebMethod]
public static IEnumerable<student> getStd()
{
            string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
            SqlConnection con = new SqlConnection(mystr);
            SqlCommand cmd = new SqlCommand("select * from student");
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            var array =dt.AsEnumerable().Select(item =>
                new student
                {
                    name = item["name"].ToString(),
                    address = item["address"].ToString(),
                    sex = item["sex"].ToString(),
                    email = item["email"].ToString()
                }).ToArray();
            return array;
}

您也可以返回列表

 [WebMethod]
 public static List<student> getStd()
 {
            string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
            SqlConnection con = new SqlConnection(mystr);
            SqlCommand cmd = new SqlCommand("select * from student");
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            var array = dt.AsEnumerable().Select(item =>
                new student
                {
                    name = item["name"].ToString(),
                    address = item["address"].ToString(),
                    sex = item["sex"].ToString(),
                    email = item["email"].ToString()
                }).ToList();
            return array;
    }  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM