Tag: lambda

列出复杂排序

我有一个大小的List ,比如XS,S,M,L,XL,XXL,UK 10,UK 12等 我想要的是强制订单是上面的,无论列表中的项目顺序如何,我想我需要一个IComparable运算符,但不确定。 理想情况下,我想让另一个List具有正确的顺序,它可以在列表中引用它的’place’并重新排序,如果它不存在则默认为AZ

局部变量和表达式树

我正在学习C#中的表达式树。 我现在被困了一段时间: string filterString = “ruby”; Expression<Func> expression = x => x == filterString; 如何通过代码构造此表达式? 没有示例如何捕获局部变量。 这个很简单: Expression<Func> expression = x => x == “ruby”; 这将是: ParameterExpression stringParam = Expression.Parameter(typeof(string), “x”); Expression constant = Expression.Constant(“ruby”); BinaryExpression equals = Expression.Equal(stringParam, constant); Expression<Func> lambda1 = Expression.Lambda<Func>( equals, new ParameterExpression[] { stringParam }); 调试器为(x => x == filterString)打印以下内容: […]

VS2015的即时窗口中的lambda表达式

我正在运行Visual Studio 2015, 人们声称在即时窗口,手表和其他地方支持lambda表达式。 但这对我不起作用。 我使用以下代码创建了一个新的控制台应用程序: static void Main(string[] args) { var list = new List {1, 2, 3, 4, 5, 6, 7}; } 然后在即时窗口中尝试一些简单的lambdas并观察,如下所示: 正如你所看到的,它给了我“表达式不能包含lambda表达式”。 我查看了工具 – >选项 – >调试设置但找不到与问题相关的任何内容。 我运行的版本是VS2015 Enterprise,14.0.24720.00 Update 1可能导致此问题的原因是什么?

什么是C#lambda编译成的? 一个堆栈框架,一个匿名类型的实例,或?

什么是C#lambda编译成的? 一个堆栈框架,一个匿名类型的实例,或? 我读过这个问题 。 这主要回答“为什么”在使用隐式类型function时不能使用lambda。 但是,这个问题的目的是回答编译器生成的构造实际执行lambda的代码。 它是一个匿名类型的方法调用(类似于在Java中实现接口的匿名类型吗?),还是只是一个堆栈框架,它引用了闭合变量并接受了参数签名? 有些lambda不会关闭任何东西 – 因此编译中有两个不同的结果输出。

将此LINQ表达式转换为Lambda

大家好,我很难将下面的linq表达式(左连接实现)转换为lambda表达式(用于学习)。 var result = from g in grocery join f in fruit on g.fruitId equals f.fruitId into tempFruit join v in veggie on g.vegid equals v.vegid into tempVegg from joinedFruit in tempFruit.DefaultIfEmpty() from joinedVegg in tempVegg.DefaultIfEmpty() select new { g.fruitId, g.vegid, fname = ((joinedFruit == null) ? string.Empty : joinedFruit.fname), vname = ((joinedVegg == null) […]

entity frameworkfilter“Expression <Func >”

我正在尝试为Entity framework List创建一个filter方法,并更好地理解Expression<Func<… 我有这样的测试function。 public IQueryable Filter(IEnumerable src, Expression<Func> pred) { return src.AsQueryable().Where(pred); } 如果我这样做: context.Table.Filter(e => e.ID < 500); 或这个: context.Table.Filter(e => e.SubTable.Where(et => et.ID 0 && e.ID < 500); 这一切都运作良好。 但如果我这样做: context.Table.Filter(e => e.SubTable.Filter(et => et.ID 0 && e.ID < 500); 或这个: context.Table.Where(e => e.SubTable.Filter(et => et.ID 0 && e.ID < 500); 我收到一个错误。 […]

循环中的Lambda变量捕获 – 这里发生了什么?

我想试试看,这里发生了什么? 编译器生成什么样的代码? public static void vc() { var listActions = new List(); foreach (int i in Enumerable.Range(1, 10)) { listActions.Add(() => Console.WriteLine(i)); } foreach (Action action in listActions) { action(); } } static void Main(string[] args) { vc(); } 输出: 10 10 .. 10 据此,将为每次迭代创建一个ActionHelper的新实例。 那么在这种情况下,我认为它应该打印1..10。 有人能给我一些编译器在这里做的伪代码吗? 谢谢。

替换lambda表达式中的参数

考虑这段代码: public class Foo { public int a { get; set; } public int b { get; set; } } private void Test() { List foos = new List(); foos.Add(new Foo()); foos.Add(new Foo()); Expression<Func> exp0 = f => fa * fb; Expression<Func> exp1 = () => foos[0].a * foos[0].b; Expression<Func> exp2 = () => foos[1].a […]

使用表达式获取方法的名称

我知道网站上有一些答案,如果这有任何重复,我道歉,但我发现的所有答案都没有做我想做的事情。 我正在尝试指定方法信息,因此我可以通过不使用字符串以类型安全的方式获取名称。 所以我试图用表达式提取它。 假设我想在此界面中获取方法的名称: public interface IMyInteface { void DoSomething(string param1, string param2); } 目前我可以使用THIS方法获取名称: MemberInfo GetMethodInfo(Expression<Action> expression) { return ((MethodCallExpression)expression.Body).Method; } 我可以调用helper方法如下: var methodInfo = GetMethodInfo(x => x.DoSomething(null, null)); Console.WriteLine(methodInfo.Name); 但我正在寻找我可以获取方法名称而不指定参数的版本(null,null) 像这样: var methodInfo = GetMethodInfo(x => x.DoSomething); 但所有尝试都无法编译 有没有办法做到这一点?

C#Lambda(=>)

可能重复: lambda的好教程 Lambda解释及它是什么以及一个很好的例子 C#Lambda表达式,我为什么要使用它? 有人可以向我解释如何使用这个并给我举例吗? 我们怎么看? 示例!=读作“不等于”。 那么=>意味着什么?