1,什么是元组?
我们先来看下元组的实际应用:
定义方法:
public async Task<Tuple<string, List<ModelPageList>, int>> GetInfoListAsync(int id, int pageIndex, int pageSize)
{
var vinNo = (await mApi.GetInfoAsync(id)).VinNo;
var modelPage = await mApi.GetListByVinNoAsync(vinNo, pageIndex, pageSize);
if (modelPage == null)
throw new UserFriendlyException("当前列表为空");
var pageCount = modelPage .Count > 0 ? (int)Math.Ceiling(modelPage .Select(n =>
n.TotalCount).FirstOrDefault() * 1.0 / pageSize) : 0;
return new Tuple<string, List<ModelPageList>, int>("success", modelPage , pageCount);
}
在控制器中调用该方法:
public async Task<JsonResult> GetPageListById(int id, int pageIndex, int pageSize)
{
var (msg, list, totalCount) = await mBLL.GetInfoListAsync(carId, pageIndex, pageSize);
return Json(new { msg, list, TotalCount = totalCount }, JsonRequestBehavior.AllowGet);
}
简单来说,当我们想在一个方法内实现返回多个不同类型的结果时,可以使用Tuple(元组),当然我们也可以用定义实体类的方法来实现它:
public class ModelInfo
{
public string Msg { get; set;}
public List<ModelPageList> PageList { get; set;}
public int TotalCount { get; set; }
}
当然正如前面那句话,我们需要多定义一个实体类。。。。。。。
2,弃元
比如上面举例的三元组方法,加入调用时我们只需要一个list,那么可以这番调用:
var (_,list,_) = await mBLL.GetInfoListAsync(carId, pageIndex, pageSize);
弃元类似于未赋值的变量;不可在代码中使用弃元(赋值语句除外)