【C#泛型:如何在lambda表达式中使用struct约束和nullables时避免代码重复】教程文章相关的互联网学习教程文章

c# – AutoMapper Project().to和可重用的lambda表达式【代码】

我在使用AutoMapper Project()获取可重用的lambda表达式时遇到问题.对于扩展方法.我正在使用AutoMapper 3.1.1. 我希望能够通过将lambda表达式定义为变量来重用它,但是在使用扩展方法时遇到问题. 注意下面显示的代码和lambda表达式是简化的,我的lambda表达式非常复杂,我想在很多地方重用它. 这是一个要重用的lambda表达式:Func<Product, bool> myLambda = x => (x.Season.Id == 3);代码块1使用Project().To<>和可重复使用的lambda,...

c# – 在另一个lambda表达式中使用lambda表达式【代码】

我需要组合两个lambda表达式,第二个表达式“包含”第一个表达式.我搜索了很多,但没有找到任何明确的答案…… 我想要做的是以下内容:第一个表达式“expression1”作为参数传递给方法,并且仅用于定义第二个lambda必须在哪个字段或属性上运行. 原理上,我正在尝试执行以下操作:// simple field selector : Expression<Func<T, string>> expression1 = obj => obj.field; // trying to use the field selector in 2nd expression : Ex...

c# – 输入类型在lambda表达式中自动更改【代码】

在使用Fluent Validation Must子句时,我注意到了一个非常奇怪的问题. 假设我有这样的模型:public class PhoneDetail {public int PrefixId { get; set; }public string Digits { get; set; } }这是验证器:public PhoneDetailValidator() {this.RuleFor(phone => phone.Digits).Must(x => x == null); }你认为x的类型是什么?串?是的,你是对的. 但是,这是什么? 它已将其类型从字符串更改为PhoneDetail.我正在使用Visual Studio ...

c# – 如何阻止ReSharper在需要Action的lambda表达式上显示错误?

在Silverlight中,System.Windows.Threading的Dispatcher.BeginInvoke()接受一个Action< T>或代表调用. .NET允许我只传递lambda表达式.但ReSharper认为这是一个错误,说“无法解析方法’BeginInvoke(lambda表达式)’”:Dispatcher.BeginInvoke(()=> {DoSomething();}) 如果我在表达式周围显式创建Action,则错误就会消失:Dispatcher.BeginInvoke(new Action< object>(o => {DoSomething();})); 在这种情况下,我更喜欢最少量的代码以...

C#泛型:如何在lambda表达式中使用struct约束和nullables时避免代码重复【代码】

说我有一个功能,如:public TProperty Foo<TClass, TProperty>(TClass instance, Expression<Func<TClass, TProperty>> expression){...}但后来我意识到它应该只用于值类型,所以我添加了一个约束public TProperty Foo<TClass, TProperty>(TClass instance, Expression<Func<TClass, TProperty>> expression)where TProperty : struct{...}但我后来发现,这不会让我传递一个可以为空的TProperty的表达式.我能看到处理这个问题的唯一方...

c# – 在执行之前传递lambda表达式的方法参数类型【代码】

我试图将一些基于接口的抽象改进为遗留代码,作为依赖注入的初步步骤.遗留代码包含我正在努力封装的lambda用法.这是现有的lambda用法:private void MethodAaa(EntityA a, EntityB a, int someInt) {...}private void MethodBbb(DateTime date, EntityA e) {...}_commandObjectFromThirdPartyLibrary.Execute(() => MethodAaa(a, b, c));_commandObjectFromThirdPartyLibrary.Execute(() => MethodBbb(d, e));我希望通过公共基类方法...

C#关于lambda表达式的解释

我刚刚发现了这个lambda表达式: myCustomerList.GroupBy(cust => cust.CustomerId).Select(grp => grp.First()); 如果我错了,请纠正我,但是使用这个lambda,你可以区分CustomerId上的myCustomerList,这是我所需要的.但我想弄清楚它是如何工作的. 第一步是groupby:这个结果在字典中,IGouping< long,Customer>使用CustomerId作为字典的键. 第二个选择发生,这是我没有得到的部分.选择选择客户,但如何从字典中选择客户?你需要一个密钥...

c# – Lambda表达式,其中列等于列表项【代码】

我的一般结果有不同的列,包括id列.我还有一个具有一组id的List.我想得到List项(id)与Id列值匹配的结果. 我尝试在循环中执行此操作:foreach(int Uid in idList) {queryResults = queryResults.Where(security => security.id== Uid); } 但是这给了我queryResults中的单个记录,它是列表中的最后一个Uid.我想要的是,list中所有Uid的记录应该在queryResults中.解决方法:您需要将每个项目的ID与存储在idList中的ID进行匹配.这可以通过...

c# – 使用linq lambda表达式的查询列表【代码】

我如何获得列表中的参与者?我得到了各县的县,然后我希望所有参与者都拥有县名单中的CountyOfParticipationId.if (collaborationId != null) {var counties = (from c in db.CountyCollaborationswhere c.CollaborationId == collaborationIdselect c).ToList();participants = participants.Where(p => p.CountyOfParticipationId in counties);}解决方法:.Where(p => counties.Contains(p.CountyOfParticipationId)) 现在如果有很...

c# – 具有正文的lambda表达式的确切类型是什么?

Windows窗体扩展方法Invoke()不接受lambda表达式,我们不必首先将它类型转换为类似Action的委托类型.这让我想知道,如果lambda表达式(带有主体)不是显式委托或表达式,它的类型是什么?解决方法:This makes me wonder, if lambda expression (with a body) is not explicitly a delegate nor an expression, what is its type?它没有正常意义上的单词类型(即CLR类型),就像null没有类型一样. (较旧版本的C#规范具有“null类型”的概念,...

c# – 无法将lambda表达式转换为“…”类型,因为它不是委托类型【代码】

美好的一天!我试图使用lambda表达式编写一个匿名方法,该表达式将从异步任务返回一个对象.我想在构造函数中执行此操作,因此这是我无法使其父方法异步的原因. ReadJsonAsync方法返回一个Session对象.我会告诉你相关的代码:Session session; fileService = new FileService(); session = async () => { return await fileService.ReadJsonAsync() };提前致谢!解决方法:如果你想要一个匿名方法,你必须声明一个返回任务< Session>的...

c# – 如何在lambda表达式中为匿名变量编写IEqualityComparer?【代码】

我想知道有一种方法可以在lambda表达式中为匿名变量实现IEqualityComparer,或者,无论如何,我需要编写类来将匿名变量转换为sprecific类并创建一个我需要实现IEqualtyComparer的类? 我编写了创建笛卡尔(Decart)生产的代码:我定义了Decart类.public class Decart {public int X;public int Y; }我为Decart类定义了IEqualtityComparerpublic class Ext : IEqualityComparer<Decart> {public bool Equals(Decart x, Decart y){if ((x....

c# – 递归lambda表达式通过有向图找到路径?【代码】

我需要在复杂的图形结构中找到一条或多条路径.该图使用类似于此的内容构建:class Node {public string Value { get; set;}public List<Node> Nodes { get; set;}public Node(){Nodes = new List<Node>();} }使这种复杂化的原因是节点可以引用回早期节点.例如,A -> C -> E -> A我需要做的是获取表示通过节点的路径的堆栈列表,直到我到达具有特定值的节点.由于可能存在一些非常大的路径,我们可以尝试使用最大节点.List<Stack<Node>>...

c# – 用于对比不同对象的Lambda表达式【代码】

我有两个列表,一个是联系人,另一个是员工.我想生成非员工的联系人子集.以下表达式似乎可以告诉我,有些联系人不是员工,现在我需要一个符合该条件的联系人列表:if(myContacts.Select(c=>c.contactID).Except(employees.Select(e=>e.contactID)).Any() {//get the subset of contacts and do stuff to them.... }TIA! 罗恩解决方法:如果您的员工和联系人序列是相同的类型对象(或者两者都继承自相同类型,如Contact),那么您可以创建Eq...

c# – 在运行时使用新的匿名类型创建lambda表达式【代码】

我想调用一个需要这样的参数的方法:Expression<Func<sometype, 'a>> expr我需要在运行时构造这个参数,因为我不知道之前的匿名类型是什么样的;它可以有任何数量的字段:x => new { a=x.a, b=x.b, c=x.c, etc... }我可以在运行时创建一个类型具有相同的’签名(这是正确的单词吗?)作为所需的匿名类型,但问题是:如何在运行时从那个构造这个lambda表达式?特别是Expression.New是烦我的,因为我需要传递一个构造函数信息给它,我必须从...