Tag: lambda

C#Lambda中的变量参数

是否可以使用C#lambda / delegate来获取可以使用Dynamic-invoke调用的可变数量的参数? 我在这种情况下尝试使用’params’关键字的尝试都失败了。 来自答案的工作代码更新: delegate void Foo(params string[] strings); static void Main(string[] args) { Foo x = strings => { foreach(string s in strings) Console.WriteLine(s); }; //Added to make it clear how this eventually is used 🙂 Delegate d = x; d.DynamicInvoke(new[]{new string[]{“1”, “2”, “3”}}); }

c#表达式中的闭包变量捕获问题

我有一个使用表达式树创建委托的函数。 在这个表达式中,我使用从传入函数的多个参数中捕获的变量。 实际的表达式树相当大,例如: Delegate GenerateFunction(T current, IList parents) { var currentExpr = Expression.Parameter(typeof(T), “current”); var parentsExpr = Expression.Parameter(parents.getType(), “parents”); var parameters = new List(); …. return Expression.Lambda(Expression.Block(new List { parentsExpr, currentExpr }, ….), parameters.ToArray()).Compile(); } 然后,我在将该函数传递给另一个要使用的函数之前,从另一个方法调用此方法。 完成所有操作后,我想访问在表达式树中更新的父项内容。 一切似乎都在编译,我的表达式看起来还不错,但是当我运行它时,我出现(虽然我不能确定)在访问parent变量时(在表达式/闭包内)获取空引用exception。 我想我想知道我做错了什么,或者这是否可行,以及了解发生了什么的提示。 我似乎无法在方法中找到任何悬挂的(?)局部变量,所以我想知道它们是否被捕获了? 谢谢,马克

编写一个接受out参数的lambda或匿名函数

我的代码中定义了一个委托: public bool delegate CutoffDateDelegate( out DateTime cutoffDate ); 我想创建委托并使用lambda或匿名函数初始化,但这些都没有编译。 CutoffDateDelegate del1 = dt => { dt = DateTime.Now; return true; } CutoffDateDelegate del2 = delegate( out dt ) { dt = DateTime.Now; return true; } 有办法做到这一点吗?

为什么我不能使用Lambda表达式取消订阅事件?

本文说明您无法使用Lambda表达式取消订阅事件 。 例如,您可以订阅如下: d.Barked += (s, e) => Console.WriteLine(“Bark: {0}”, e); 但你不能这样取消订阅: d.Barked -= (s, e) => Console.WriteLine(“Bark: {0}”, e); 为什么? 这与代表取消订阅有什么区别,例如 EventHandler handler = (s, e) => Console.WriteLine(“Bark: {0}”, e); d.Barked += handler; // … d.Barked -= handler;

C#中的简写条件类似于”’关键字中的SQL’

在C#中有一种写简单的简写方法: public static bool IsAllowed(int userID) { return (userID == Personnel.JohnDoe || userID == Personnel.JaneDoe …); } 喜欢: public static bool IsAllowed(int userID) { return (userID in Personnel.JohnDoe, Personnel.JaneDoe …); } 我知道我也可以使用switch,但是我可能要编写大约50个这样的函数(将一个经典的ASP站点移植到ASP.NET),所以我想让它们尽可能短。

Linq / Lambda OrderBy委托列出IP地址的

给定List ips = new List(); 我需要按逻辑顺序对IP地址列表进行排序(即“192.168.0.2”出现在“192.168.0.100”之前)。 目前(并且正确地,按字母顺序排列)列表是否包含: 192.168.0.1 192.168.0.2 192.168.0.10 192.168.0.200 ips.OrderBy(p => p)返回: 192.168.0.1 192.168.0.10 192.168.0.2 192.168.0.200

如何将谓词表达式分解为查询?

我有以下类Person ,带有自定义Where方法: public class Person { public string Name { get; set; } public int Age { get; set; } public string Where(Expression<Func> predicate) { return String.Empty; } } 如何以可枚举的方式检索Expression参数名称和值? Person p = new Person(); p.Where(i => i.Name == “Shlomi” && i.Age == 26); 用于根据表达式的名称和值构建带有参数的字符串查询。 // Eventually I will convert the above into the following: […]

C#Linq或Lambda表达式按周列出IEnumerable列表,带有日期字段

我试图按IEnumerable进行查询,按周分组,例如: Project(Name, DateStart,ID) 我有IEnumerable ,我想做一个报告,按周分组。 例如: Week 1 Project1 8/4/2013 ID1 Project2 9/4/2013 ID2 Week 2 Project1 16/4/2013 ID3 Project2 18/4/2013 ID5 Week 3 Project1 24/4/2013 ID7 Project2 26/4/2013 ID8 如果有人能帮我一把,我真的很感激! 我试图做一个lambda表达但没有成功。 谢谢!

c#中的lambda表达式和var关键字

可能重复: C#为什么不能将匿名方法分配给var? 我在c#中有以下声明 Func add = (x, y) => x + y; 但是当我用以下代替左手边的声明时 var add = (x, y) => x + y; 我收到编译错误( 无法将lambda表达式赋值给隐式类型的局部变量 )。为什么?

C#按属性名称动态访问属性值

我试图解决的问题是如何编写一个方法,该方法将属性名称作为字符串,并返回分配给所述属性的值。 我的模型类声明类似于: public class Foo { public int FooId public int param1 public double param2 } 从我的方法中,我希望做一些类似的事情 var property = GetProperty(“param1) var property2 = GetProperty(“param2”) 我目前正在尝试使用表达式,如 public dynamic GetProperty(string _propertyName) { var currentVariables = m_context.Foo.OrderByDescending(x => x.FooId).FirstOrDefault(); var parameter = Expression.Parameter(typeof(Foo), “Foo”); var property = Expression.Property(parameter, _propertyName); var lambda = Expression.Lambda<Func>(parameter); } 这种方法是否正确,如果是这样,是否可以将其作为动态类型返回? 答案是正确的,这使得这太复杂了。 解决方案现在是: […]