Tag: lambda

什么是设备以及如何使用lambda表达式?

我已经读过Lambda表达式是C#的一个非常强大的补充,但我发现自己对它们感到困惑。 他们如何改善我的生活或改善我的代码? 有人能指出学习这些表达的好资源吗? 它们看起来很酷,但它们与我作为asp.net开发人员的日常生活有何关系? 编辑:感谢您的示例,并感谢Eric White的文章链接。 我现在还在消化它们。 一个简单的问题:lambda表达式对查询以外的任何东西都有用吗? 我见过的每个例子都是一个查询结构。

Lambda表达式树解析

我试图在项目中使用Lambda表达式映射到第三方查询API。 所以,我正在手工解析Expression树。 如果我传入一个lambda表达式,如: p => p.Title == “title” 一切正常。 但是,如果我的lambda表达式如下: p => p.Title == myaspdropdown.SelectedValue 使用.NET调试器,我没有看到该函数的实际值。 相反,我看到类似的东西: p => p.Title = (value(ASP.usercontrols_myaspusercontrol_ascx).myaspdropdown.SelectedValue) 是什么赋予了? 当我尝试将表达式的右侧作为字符串抓取时,我得到(value(ASP.usercontrols_myaspusercontrol_ascx).myaspdropdown.SelectedValue)而不是实际值。 我如何获得实际价值?

即使签名匹配,也无法将一种类型的委托分配给另一种类型

我的病态好奇让我想知道为什么以下失败: // declared somewhere public delegate int BinaryOperation(int a, int b); // … in a method body Func addThem = (x, y) => x + y; BinaryOperation b1 = addThem; // doesn’t compile, and casting doesn’t compile BinaryOperation b2 = (x, y) => x + y; // compiles!

ThreadPool.QueueUserWorkItem,带有lambda表达式和匿名方法

将两个参数传递给线程池上的新线程有时会很复杂,但看起来使用lambda表达式和匿名方法,我可以这样做: public class TestClass { public void DoWork(string s1, string s2) { Console.WriteLine(s1); Console.WriteLine(s2); } } try { TestClass test = new TestClass(); string s1 = “Hello”; string s2 = “World”; ThreadPool.QueueUserWorkItem( o => test.DoWork(s1, s2) ); } catch (Exception ex) { //exception logic } 现在,我肯定简化了这个例子,但这些要点是关键: 传递的字符串对象是不可变的,因此是线程安全的 s1和s2变量在try块的范围内声明,我在将工作排队到线程池后立即退出,因此在此之后永远不会修改s1和s2变量。 这有什么问题吗? 另一种方法是创建一个实现具有3个成员的不可变类型的新类:test,s1和s2。 这似乎是额外的工作,在这一点上没有任何好处。

循环优化或lambda闭包的问题?

在下面的方法中,我发送一个动作的枚举,并希望返回一个ICommands数组,调用Action来包装那些动作(relayCommand所需)。 问题是,如果我在每个内部(甚至是for循环)中执行此操作,我将获得始终执行参数中传递的第一个操作的命令。 public static ICommand[] CreateCommands(IEnumerable actions) { List commands = new List(); Action[] actionArray = actions.ToArray(); // works //commands.Add(new RelayCommand(o => { actionArray[0](); })); // (_execute = {Method = {Void b__0(System.Object)}}) //commands.Add(new RelayCommand(o => { actionArray[1](); })); // (_execute = {Method = {Void b__1(System.Object)}}) foreach (var action in actionArray) { // always add the […]

用表达式树读取对象的属性

我想为动态读取值的Object的每个属性创建一个Lambda表达式。 到目前为止我所拥有的: var properties = typeof (TType).GetProperties().Where(p => p.CanRead); foreach (var propertyInfo in properties) { var getterMethodInfo = propertyInfo.GetGetMethod(); var entity = Expression.Parameter(typeof (TType)); var getterCall = Expression.Call(entity, getterMethodInfo); var lambda = Expression.Lambda(getterCall, entity); var expression = (Expression<Func>) lambda; var functionThatGetsValue = expression.Compile(); } 只要“TypeOfProperty”是硬编码的,当我调用functionThatGetsValue时,代码运行良好。 我知道我无法动态传递“TypeOfPoperty”。 我能做些什么来实现我的目标?

“=>”是什么意思?

原谅我,如果这会尖叫新手,但在C#中是什么意思? 我上周在一个演示文稿中,这个操作符(我认为)是在ORM的上下文中使用的。 在我回到笔记之前,我并没有真正关注语法的细节。

从表达式获取字符串属性名称

我正在尝试写一个强类型的帮助器,它是这样的: Html.Lookup(x => x.FooId); 现在我有这个: public static MvcHtmlString Lookup(this HtmlHelper html, Func expression) { // get string “FooId” here } 谁知道怎么弄这个?

Group by,Count和Lambda Expression

我正在尝试翻译以下查询: SELECT STATE, COUNT(*) FROM MYTABLE GROUP BY STATE; 进入lambda表达式。 我正在使用C#和EntityFramework,但似乎我无法使其工作。 到目前为止,这是我在我的存储库中的内容: public IEnumerable PorcentajeState(Guid id) { return _context.Sates.Where(a => a.Id == id) .GroupBy(a => a.State) .Select(n => new { n.StateId , n.Count() }); } 当然它没有编译,我在谷歌搜索2小时后迷路了。 请你帮助我好吗? 提前致谢

拆除逗号分隔的字符串,同时删除空格和空条目

我想将逗号分隔的字符串转换为字符串数组,并删除空格和空条目。 例如,给定输入: string valueString = “sam, mike, , ,john , Tom and jerry , “; 预期结果将是以下值(当然,修剪): sam mike john Tom and Jerry 我已经尝试了以下修改值的代码行,但是这无法删除“空”条目: valueString.Split(‘,’).Select(sValue => sValue.Trim()).ToArray(); 什么是最好的方法来修剪输入和清理和清空可能导致过程的条目?