栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

扩展方法语法vs查询语法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

扩展方法语法vs查询语法

老实说,一旦您开始使用Funcs和Actions,有时可能会出现这种情况。假设您正在使用以下三个功能:

  Func<DataClasses.User, String> userName = user => user.UserName;  Func<DataClasses.User, Boolean> userIDOverTen = user => user.UserID < 10;  Func<DataClasses.User, Boolean> userIDUnderTen = user => user.UserID > 10;

如您所见,第一个替换了lamdba表达式以获取用户名,第二个替换了用于检查ID是否小于10的lamdba表达式,让我们面对现实,第三个应该很容易理解。

注意:这是一个愚蠢的示例,但它可以工作。

  var userList =     from user in userList    where userIDOverTen(user)    select userName;

  var otherList =    userList    .Where(IDIsBelowNumber)    .Select(userName)

在此示例中,第二个稍微冗长一些,因为扩展方法可以充分利用Func,但是Linq表达式却不能,因为它只是查找布尔值而不是返回布尔值的Func。但是,在这里使用表达语言可能会更好。假设您已经有一种方法不仅可以吸收用户:

  private Boolean IDIsBelowNumber(DataClasses.User user,Int32 someNumber, Boolean doSomething)  {    return user.UserID < someNumber;  }

注意:之所以可以使用doSomething,是因为where扩展方法可以接受用户和整数并返回布尔值的方法。对于这个例子有点烦人。

现在,如果您查看Linq查询:

  var completeList =     from user in userList     where IDIsBelowNumber(user, 10, true)     select userName;

你对它有好处。现在扩展方法:

  var otherList =    userList    .Where(IDIsBelowNumber????)    .Select(userName)

没有lambda表达式,我真的无法调用该方法。所以现在我要做的是创建一个基于原始方法调用创建Func的方法。

   private Func<DataClasses.User, Boolean> IDIsBelowNumberFunc(Int32 number)   {      return user => IDIsBelowNumber(user, number, true);   }

然后将其插入:

  var otherList =     userList     .Where(IDIsBelowNumberFunc(10))     .Select(userName)

因此您可以看到,有时使用查询方法有时可能会更容易。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号