yield return关键字其实相当于 list
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { DataTable dt = AddUserInfo(); IEnumerable<UserInfo> i = GetUserInfoByYield(dt); foreach (var ii in i) { Console.WriteLine(ii.Name + ii.Age + ii.Address); } List<UserInfo> u = GetUserInfoByList(dt); foreach (var ii in i) { Console.WriteLine(ii.Name + ii.Age + ii.Address); } Console.Read(); } public static DataTable AddUserInfo() { DataTable userInfo = new DataTable("UserInfo"); DataColumn Name = new DataColumn("Name"); DataColumn Age = new DataColumn("Age"); DataColumn Address = new DataColumn("Address"); userInfo.Columns.Add(Name); userInfo.Columns.Add(Age); userInfo.Columns.Add(Address); DataRow dr = userInfo.NewRow(); dr["Name"] = "Sunny"; dr["Age"] = 24; dr["Address"] = "a"; userInfo.Rows.Add(dr); dr = userInfo.NewRow(); dr["Name"] = "Cary"; dr["Age"] = 25; dr["Address"] = "b"; userInfo.Rows.Add(dr); return userInfo; } public static IEnumerable<UserInfo> GetUserInfoByYield(DataTable dt) { if (dt != null) { UserInfo u = new UserInfo(); foreach (DataRow aa in dt.Rows) { u.Name = aa["Name"].ToString(); u.Address = aa["Address"].ToString(); u.Age = Convert.ToInt16(aa["Age"]); yield return u; } } } public static List<UserInfo> GetUserInfoByList(DataTable dt) { List<UserInfo> userInfo = new List<UserInfo>(); foreach (DataRow u in dt.Rows) { UserInfo uu = new UserInfo(); uu.Name = u["Name"].ToString(); uu.Address = u["Address"].ToString(); uu.Age = Convert.ToInt16(u["Age"]); userInfo.Add(uu); } return userInfo; } } }