Tag: lambda

连接两个Func委托

假设我有类: public class Order { int OrderId {get; set;} string CustomerName {get; set;} } 我也在下面声明变量 Func predicate1 = t=>t.OrderId == 5 ; Func predicate2 = t=>t.CustomerName == “Ali”; 有没有办法连接这些变量(用AND / OR)并将结果放在第三个变量? 例如: Func predicate3 = predicate1 and predicate2; 要么 Func predicate3 = predicate1 or predicate2;

为什么不能在即时窗口中评估lambdas?

有什么特别的原因吗? 它根本不可能还是仅仅没有实现? 也许有任何第三方插件允许lambda评估? 更新: 我在codeplex Extended Immediate Window上找到了这个项目。 似乎已经放弃了一段时间,但这可以certificate一个概念。 有没有人知道任何其他即时窗口扩展插件? 那些可以在C#中运行/ foreach语句的例子?

linq中的动态排序

请考虑这种情况: 我有一个包含大约50个字段的类的列表。我想要一个用户可以根据字段列表进行排序的Combobox。例如,如果用户选择“F1”列表,则根据“F1”排序。 我不想为每个字段使用if-else排序。我看到这个主题: 在对数据集或对象列表进行数据绑定时对网格视图进行排序 但我无法使用它的答案。 我如何才能将Expression Tree用于此目的? 谢谢 编辑1) : 据亲爱的@Thom Smith回答,我写了这段代码: using (NorthwindModel1.NorthwindEntities2 ent = new NorthwindModel1.NorthwindEntities2()) { var query = from o in ent.Orders where o.OrderID < 10257 select o; query.OrderBy("CustomerID", SortDirection.Ascending); GridView1.DataSource = query; GridView1.DataBind(); } 但它没有排序。 如果我用这种方式编写代码: GridView1.DataSource = query.OrderBy(o=>o.CustomerID); 它是排序的。 问题出在哪儿?

如何在VB.Net中声明lambda事件处理程序?

我相信以下VB.Net代码相当于正在进行的C#代码; 但VB.Net测试失败 – 从未调用处理Lambda的事件。 到底是怎么回事? VB.Net版本 – 失败: _ Public Class TestClass _ Public Sub EventTest() Dim eventClass As New EventClass Dim eventRaised As Boolean = False AddHandler eventClass.AnEvent, Function() (eventRaised = True) eventClass.RaiseIt() Assert.IsTrue(eventRaised) End Sub End Class Public Class EventClass Public Event AnEvent() Public Sub RaiseIt() RaiseEvent AnEvent() End Sub End Class C#版本 […]

具有匿名类型的C#LINQ构建表达式

我有代码只使用一个属性“名称”构建列表。 如何修改代码,以便它可以构建具有两个属性“Name”和“Test_Result”的列表我知道匿名类型可以用来执行此操作,但是如何将它们用于动态表达式? 这是我的代码: string item = “Name”; string item2 = “Test_Result”; Type studentType = typeof(Student); ParameterExpression itemParam = Expression.Parameter(studentType, item); MemberInfo itemProperty = studentType.GetProperty(item); MemberExpression valueInItemField = Expression.MakeMemberAccess(itemParam, itemProperty); Expression<Func> selectExpression = Expression<Func> .Lambda<Func>(valueInItemField, itemParam); IEnumerable currentItemFields = DeserializedStudents.Select(selectExpression.Compile());

Lambda变量名称 – 短名称,还是不短名称?

通常,当我使用lambdas时,我只使用“a,b,c,d ……”作为变量名称,因为类型很容易推断,我发现短名称更容易阅读。 这是一个例子: var someEnumerable = GetSomeEnumerable(); var somethingElseList = someEnumerable.Select(a => a.SomeProperty) .OrderBy(a => a.SomePropertyField); var someDictionary = somethingElseList.ToDictionary(a => new SomeClass(a.Prop1), a => a); 有人质疑这个命名,并且更愿意看到长输出的名称,如下所示: var someEnumerable = GetSomeEnumerable(); var somethingElseList = someEnumerable.Select(importantObj => importantObj.SomeProperty) .OrderBy(objsInfo => objsInfo.SomePropertyField); var someDictionary = somethingElseList.ToDictionary(theInfoId => new SomeClass(theInfoId.Prop1), theInfoId2 => theInfoId2); 由于范围很窄(在parens之间),除非你变得愚蠢并将它们嵌套,否则我会发现阅读短名称更容易。 我没有被上面使用的愚蠢的命名示例所吸引,对Lambda变量名称的一般共识是什么? 要简短的名字,还是不要简短的名字?

MVC中的@ Html.EditorFor(m => m)lambda语法

我只是在学习C#和MVC,并试图了解一些例子。 @Html.EditorFor(m => m) 最终我发现’=>’是lambda运算符,它意味着像“m这样的m”。 这对我来说没有任何意义。 为什么不直接进入? 另外,我没有看到m在我正在使用的任何视图中定义。 定义了模型,据称这就是这种方法所采用的方法。 这是如何运作的? 最后,我查看了Html.EditorFor的定义,并没有看到只传递一个参数的任何重载。 这个语法定义在哪里? http://msdn.microsoft.com/en-us/library/ee834942.aspx

Func 如何工作?

我正在创建一个Distinct扩展方法,我可以传递如下标准。 persons.Distinct(p => p.Name); 我从网上获得了代码,但我很难理解Func的目的。 另外,当我说p => p.Name时,我发送String Name还是发送完整的Person对象? 这是新的Distinct方法: public static class ExtensionMethods { public static IEnumerable Distinct( this IEnumerable list, Func checker) { return list.Distinct(new GenericComparer(checker)); } } public class GenericComparer : IEqualityComparer { private Func _checker; public GenericComparer(Func checker) { _checker = checker; } public bool Equals(T x, T y) { return […]

C#和F#lambda表达式代码生成

让我们看看F#为简单函数生成的代码: let map_add valueToAdd xs = xs |> Seq.map (fun x -> x + valueToAdd) 生成的lambda表达式代码(F#function值的实例)如下所示: [Serializable] internal class map_add@3 : FSharpFunc { public int valueToAdd; internal map_add@3(int valueToAdd) { this.valueToAdd = valueToAdd; } public override int Invoke(int x) { return (x + this.valueToAdd); } } 看看几乎相同的C#代码: using System.Collections.Generic; using System.Linq; static class Program { […]

C#在lambda表达式中切换

是否有可能在lambda表达式中进行切换? 如果没有,为什么? Resharper将其显示为错误。