【问题标题】:cannot convert from 'void' to 'project.Models.tblUserTypes.tblUsersTypeC'无法从“void”转换为“project.Models.tblUserTypes.tblUsersTypeC”
【发布时间】:2015-10-26 10:37:08
【问题描述】:

我想在 lambda ForEach 中使用 if 语句创建新对象,这是什么代码问题?

List<tblUsersTypeC> usertype = new List<tblUsersTypeC>();
usertype.Add(userToInsertList.ForEach(o => 
{
    if ((o.Counts.FollowedBy + o.Counts.Follows + o.Counts.Media) == 0) 
        new tblUsersTypeC { isPrivite = true, UserName = o.Username, WebsiteUrl = o.Website };
    else
        new tblUsersTypeC { isPrivite = false,  UserName = o.Username, WebsiteUrl = o.Website };
}));

【问题讨论】:

  • 为什么要否定????????
  • 您还没有解释问题是什么。这被称为“代码转储问题”。您需要描述问题,以及到目前为止您为尝试解决问题所做的工作
  • 问题在标题!!我的代码出现此错误:无法从“void”转换为“project.Models.tblUserTypes.tblUsersTypeC”
  • 然后我得到这个错误:Description Line Anonymous function convert to a void return delegate cannot return a value 76

标签: c# linq lambda


【解决方案1】:

List&lt;T&gt;.ForEach 旨在遍历列表项并使用它们的当前状态做一些事情。实际上,您的问题是另一个示例,它表明 ForEach 方法是 foreach 运算符的不自然、不明显的替代品。

要根据当前列表中的项目获取新的项目列表,请使用Select/ToList 扩展:

var usertype = userToInsertList
    .Select(o => new tblUsersTypeC
    {
        isPrivite = (o.Counts.FollowedBy + o.Counts.Follows + o.Counts.Media) == 0, 
        UserName = o.Username, 
        WebsiteUrl = o.Website 
    })
    .ToList();

【讨论】:

    【解决方案2】:

    试试这个:

    List<tblUsersTypeC> usertype = userToInsertList.Select(o => new tblUsersTypeC() 
        { 
            isPrivite = ((o.Counts.FollowedBy + o.Counts.Follows + o.Counts.Media) == 0), 
            UserName = o.Username, 
            WebsiteUrl = o.Website 
        }).ToList();
    

    【讨论】:

    • 这是一种非常奇怪的创建新列表的方式。还要注意,如果你在newForEach之间加几行代码,代码的可读性和可维护性会低很多。
    • 为什么?我想以最快的方式创建新列表,有时我想添加 1M 用户。你知道吗!?
    • 更新了@Dennis 的评论
    • 真正的可维护性。
    【解决方案3】:

    使用

    userToInsertList.Select( o=> (condition) ? value1: value2);
    

    userToInsertList.Select( o=> { if(condition) { return value1} else {return value2;}});
    

    List.ForEach 不返回任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多