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。