让C#委托来帮你简化代码,学习使用Func、Action委托
为了方面大家更好地理解我写这篇文章的目的,这篇文章我会详细介绍我的代码,我有什么理解错误的,请大家不吝赐教。
首先我定义2 个类。
公司类:
UserCompany.cs
class UserCompany
{
public int ID { get; set; }
public string CompanyName { get; set; }
public string CompanyDesc { get; set; }
}
员工类:
UserInfo.cs
class UserInfo
{
public int ID { get; set; }
public string UserName { get; set; }
public int UserCompanyID { get; set; }
public UserCompany UserCompany_UserCompanyID { get; set; }
}
也许大家看到了,这里的员工类(UserInfo)有一个属性UserCompanyID 来标记这个员工属于哪个公司。
同时也有一个属性UserCompany_UserCompanyID 表示这个UserCompanyID 对应的公司类(UserCompany)。
下面是一个方法来得到所有的公司,一般我们的数据是保存在数据库中的。为了演示,这里就不访问数据库了。
/// <summary>
/// 得到所有的公司信息
/// </summary>
/// <returns></returns>
static IList<UserCompany> GetAllUserCompanys()
{
return new List<UserCompany>()
{
new UserCompany(){ ID = 1, CompanyName = "新浪", CompanyDesc = "新浪是个大公司" },
new UserCompany(){ ID = 2, CompanyName = "百度", CompanyDesc = "百度是个大公司" },
new UserCompany(){ ID = 3, CompanyName = "腾讯", CompanyDesc = "腾讯是个大公司" },
new UserCompany(){ ID = 4, CompanyName = "网易", CompanyDesc = "网易是个大公司" },
new UserCompany(){ ID = 5, CompanyName = "搜狐", CompanyDesc = "搜狐是个大公司" },
new UserCompany(){ ID = 6, CompanyName = "阿里巴巴", CompanyDesc = "阿里巴巴是个大公司" }
};
}
同时也有一个方法来得到所有的员工。
/// <summary>
/// 得到所有的员工信息
/// </summary>
/// <returns></returns>
static IList<UserInfo> GetAllUserInfos()
{
return new List<UserInfo>()
{
new UserInfo(){ ID = 1, UserName = "张三", UserCompanyID = 2 },
new UserInfo(){ ID = 2, UserName = "李四", UserCompanyID = 1 },
new UserInfo(){ ID = 3, UserName = "王五", UserCompanyID = 4 },
new UserInfo(){ ID = 4, UserName = "赵六", UserCompanyID = 1 },
new UserInfo(){ ID = 5, UserName = "杨七", UserCompanyID = 3 },
new UserInfo(){ ID = 6, UserName = "朱八", UserCompanyID = 1 },
new UserInfo(){ ID = 7, UserName = "孙九", UserCompanyID = 2 },
new UserInfo(){ ID = 8, UserName = "萧十一郎", UserCompanyID = 1 }
};
}
一般如果我们得到了所有的员工的基本信息后,还想得到这些员工对应的公司信息,比如:公司名、公司描述等等。
怎么办呢?我的思路是,当我们得到这些员工的基本信息后,就能够得到每个员工对应的公司ID(UserCompanyID),
然后我在利用Linq 取出这些公司ID(UserCompanyID),保存到一个可以枚举的集合中IEnumerable<int>,然后去
数据库中取出这些公司ID(UserCompanyID)对应的公司信息。下面是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConAppTest
{
class Program
{
static void Main(string[] args)
{
IList<UserInfo> users = GetAllUserInfos();
IEnumerable<int> userCompanyIds = users.Select<UserInfo, int>(u => u.UserCompanyID).Distinct();
IEnumerable<UserCompany> existsCompanys = GetCompanysByCompanyIds(userCompanyIds);
foreach (UserCompany companyItem in existsCompanys)
{
if(companyItem == null)
{
continue;
}
Console.WriteLine(companyItem.CompanyName);
}
}
&
补充:软件开发 , C# ,