Tag: lambda

List 的自定义排序

我有一个List ,其中T是我的Event类型,其字段time类型为long 。 此列表从Web服务填充,如果事件没有时间,则值设置为0。 我想要做的是按时间按升序排序我的列表,但是在最底部放置时间= 0的项目。 目前我正以一种时尚的方式实现这一目标,我想学习更好的方法。 var events = new ObservableCollection(); var resp = JsonConvert.DeserializeObject(restResponse.Content).Items; var notime = resp.Where(r => r.time == 0); var yestime = resp.Where(r => r.time > 0); yestime.ToList().ForEach(events.Add); notime.ToList().ForEach(events.Add); CallbackInternal(callback, events); 我试图实现一个自定义的IComparer ,但是效果并不好(这里只有一次) public class EventComparer : IComparer { public int Compare(Event x, Event y) { if (x.time == 0) […]

在对象初始化期间添加事件处理

我需要将某种类型的实例(将在此刻创建)传递给方法。 这种类型提供了我想订阅的几个事件,所以我的代码如下所示: var instance = new Instance(); instance.OnEvent1 += (sender, args) => { DoThis(); DoThat(); } instance.OnEvent2 += (sender, args) => DoThisToo(); instance.OnEvent3… MyMethod(instance); 现在,是否可以在初始化期间添加处理程序? 所以我可以这样写: MyMethod((MyType)instance => { instance.OnEvent1 += (sender, args) => { DoThis(); DoThat(); } instance.OnEvent2… }); 当然,由于美容原因,这仅是期望的。 我喜欢我的代码小而且可读。

使用lambda for winforms事件有什么问题吗?

这是一个非常简单的问题。 我问,因为我之前从未见过它,这让我想知道是不是有什么问题。 comboBox1.MouseEnter += (a, b) => comboBox1.Focus(); campaignDataGridView.MouseEnter += (a, b) => campaignDataGridView.Focus();

针对IEnumerable 过滤IEnumerable

我有一个具有属性StockNumber的对象Style 。 我想根据用户在搜索中输入的IEnumerable stockNumbers过滤所有Db.Styles的列表。 DB.Styles是一个IEnumerable 。 这基本上是我想要做的: public IEnumerable LoadListOfStyles(IEnumerable stockNumbers) { return Db.Styles.Intersect(stockNumbers); // Need to filter Db.Styles based on stockNumbers } 那么有没有一种简单的方法可以将Db.Styles中所有样式的列表与Db.Styles中的搜索值进行stockNumbers以返回仅用户搜索过的Styles的筛选列表? 我看到能够做到这一点的唯一方法是让2个IEnumerable对象相交,但是从搜索的库存号中逐个加载样式似乎是很多不必要的代码。 我想知道是否有更简单的方法。 或者我是否需要使用自己的方法来过滤结果?

将C#语句体lambda转换为VB

看来VS8中的VB不支持/转换带有语句体的lambda表达式。 我在我的C#应用​​程序中使用它们,但现在必须将它转换为VB。 我正在动态创建一大堆控件,我希望能够动态地为它们提供事件处理程序。 这样我就可以从数据库构建动态用户界面。 在下面的代码中,我将创建一个表单和一个复选框,使复选框控制表单的可见性,向表单添加一些方法处理程序,然后将新创建的复选框添加到预先存在的表单/面板/等。 例如,表单的处理程序会影响复选框: // Inside some loop creating a lot of these forms and matching checkboxes Form frmTemp = frmTestPanels[i]; // New form in array CheckBox chkSelectPanel; // New checkbox that selects this panel chkSelectPanel = new CheckBox(); chkSelectPanel.Text = SomeName; // Give checkbox a label chkSelectPanel.Click += (ss, ee) => // […]

无法将lambda表达式转换为类型“…”,因为它不是委托类型

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

LambdaExpression CompileToMethod

我有几行代码 public void CreateMethod(Expression<Action> method) { var innerMethod = Builder.DefineMethod(“SomeName”,MethodAttributes.Private); method.CompileToMethod(innerMethod); //more code } 但是第二行失败了。 我尝试过不同版本的DefineMethod运气不佳。 有什么建议?

我如何从字符串中创建动态lambda表达式?

我需要在我的方法中使用Lambda Expression public static class QueryableDynamicExtension { public static IQueryable DynamicEquals( this IQueryable query, string field, object value) { Expression<Func> expr = ??? return query.Where(expr); } } 在这个方法中,我希望它返回相同 IQueryable articles = new ModelDataContext().Articles.Where(m => m.CategoryId == 5); // I want replace by IQueryable articles = new ModelDataContext().Articles.DynamicEquals(“CategoryId”, 5); 在这种情况下我应该如何构建“expr”? 请帮忙。

来自lambda的RelayCommand和构造函数参数

如果在XAML文件中,我将Button从以下类绑定到“Command”,则单击Button不会导致执行DoIt: class Thing() { public Thing(Foo p1) { Command = new RelayCommand(() => DoIt(p1)); } private DoIt(Foo p) { p.DoSomething(); } public ICommand Command { get; private set; } } 但是,如果我从p1初始化一个字段并将该字段作为参数传递给lambda中的方法调用,它确实有效: class Thing() { private Foo field; public Thing(Foo p1) { field = p1; Command = new RelayCommand(() => DoIt(field)); } private DoIt(Foo p) { […]

如何在“sub”表达式中使用lambda表达式参数?

我希望能够像下面的委托一样构建表达式: Func createSomeType1 = (args) => { return new SomeType1((P1)args[0], (P2)args[1], (P3)args[2]); }; 我刚开始用手工制作的表达式,请原谅我这是一个相当简单的问题(或者我误解了一些问题)。 我知道要使用正确的类型创建构造函数,我会执行以下操作: var p1 = Expression.Parameter(typeof(P1)); var p2 = Expression.Parameter(typeof(P2)); var p3 = Expression.Parameter(typeof(P3)); var someType1Exp = Expression.New(constructorInfo, p1, p2, p3); 然后我知道,“外部”lambda,我认为,这样声明: Expression<Func>.Lambda<Func>( someType1Exp, Expression.Parameter(typeof(object[]))); 我无法绕过如何将参数从外部表达式“传递”到内部表达式,然后将其转换为正确的类型。 任何正确方向的提示都值得赞赏。