Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中将列表转换为数组_C#_Arrays - Fatal编程技术网

C# 在c语言中将列表转换为数组

C# 在c语言中将列表转换为数组,c#,arrays,C#,Arrays,我有这个密码 [WebMethod] public static Array[] getStd() { List<student> std = new List<student>(); string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString; SqlConnection con = new SqlConn

我有这个密码

[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;
    }  

谁想故意调用名为getStd的方法?;-另外,只需在foreach循环外执行ToArray调用,您就完成了—您尝试了什么?只需返回std.ToArray;。为什么要返回数组的数组?我想你的意思是要返回学生[]。我不理解你的问题。似乎您知道如何转换为数组,因为您在这里这样做student[]arr=std.ToArray;。你肯定知道怎么退货吗?我会想,难的部分已经完成了?祝您度过愉快的一天代码效率低下,您不必要地一次将整个数据集加载到内存中。只需使用SqlDataReader。