Tag: lambda

找到差异的Lambda表达式

有以下数据 string[] data = { “a”, “a”, “b” }; 我非常想找到重复项并得到这个结果: a 我尝试了以下代码 var a = data.Distinct().ToList(); var b = a.Except(a).ToList(); 显然这不起作用,我可以看到上面发生了什么,但我不知道如何解决它。

“x => {throw ..}”的Lambda推断为在重载方法中匹配Func ?

我不明白为什么C#最终在以下LINQPad代码中执行不正确的扩展方法: void Main() { // Actual: Sync Action “Expected: Sync Action”.Run(x => { x.Dump(); }); // Actual: Async Task “Expected: Async Task”.Run(async x => { await System.Threading.Tasks.Task.Run(() => x.Dump()); }); // Actual: Async Task!! “Expected: Sync Action”.Run(x => { throw new Exception(“Meh”); }); } static class Extensions { public static void Run(this T instance, Action […]

运行时创建LINQ表达式

说我有这个表达式: int setsize = 20; Expression<Func> predicate = x => x.Seed % setsize == 1 || x.Seed % setsize == 4; 这基本上将一组元素“划分”为20个分区,并从每个集合中检索每个第一和第四个元素。 此表达式传递给MongoDB ,它的驱动程序完全能够转换为MongoDB“查询”。 但是,谓词也可以用在对象列表(LINQ2Objects)等上。我希望这个表达式可以重用( DRY )。 但是,我希望能够传入IEnumerable来指定要检索的项目(因此1和4不是“硬编码”到其中): public Expression<Func> GetPredicate(IEnumerable items) { //Build expression here and return it } 使用LINQPad使用此代码: int setsize = 20; Expression<Func> predicate = x => x.Seed % setsize == 1 […]

构建表达式树

我正在努力解决如何为更多lambda建立表达式树的想法,例如下面的那个,更不用说可能有多个语句的东西了。 例如: Func GetBytes = x => x.HasValue ? BitConverter.GetBytes(x.Value) : new byte[1] { 0xFF }; 我很感激任何想法。

C#会内联这些function吗?

我正在用C#编写一个性能关键的应用程序,核心操作是权重计算。 该函数如下所示: public void ForEachWeight(Action action) { for (int lower = 0; lower < LowerLayerSize; lower++) { for (int upper = 0; upper < UpperLayerSize; upper++) { action(lower, upper, Weights[(lower * UpperLayerSize) + upper]); } } } 它在几十个地方被调用,具有各种简单的function,如: if (activationMethod == ActivationMethod.Binary) { ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += weight; } else { ForEachWeight((lower, upper, […]

Java中的Lambda表达式?

我需要将部分项目从C#切换到Java。 但在此之前,我想仔细和完整地比较两种语言。 关于lambda表达式,我可以通过C#编写非常优雅的代码,问题是如何在Java中优雅地实现相同的function? 提前致谢! class Program { enum Gender { Male, Female } class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public Gender Gender { get; set; } public override string ToString() { return string.Format(“Id: {0}, Name: {1}, Age: […]

有没有办法同步运行异步lambda?

有没有办法同步运行异步lambda? 不允许修改lambda表达式,它必须按原样保留。 复制/粘贴示例(这是一个抽象): var loopCnt = 1000000; Action<List> aslambda = async (l) => { Thread.Sleep(100); await Task.Run(() => { }); for (int i = 0; i < loopCnt; i++) { l.Add(i); } }; var lst = new List(); aslambda(lst); //This runs asynchronously if (lst.Count < loopCnt-100) { ; } 解: 接受一个答案对我来说真是一个两难的选择。 我已经尝试过使用NuGet软件包的Stephen Cleary的解决方案 – 工作精彩且广泛适用,但是dvorn对问题(因为它的制定;))的回答要容易得多。 […]

C#Lambda表达式或代理作为属性或参数

我正在寻找创建一个ValidationRule类来validation实体类型对象的属性。 我真的想设置要检查的属性的名称,然后为该类提供一个委托或一个lambda表达式,当对象运行其IsValid()方法时将在运行时计算该表达式。 有没有人有这样的事情片段,或者有关如何将匿名方法作为参数或属性传递的任何想法? 另外,我不确定我是否在解释我想要完成的事情,所以如果我不清楚,请提出问题。

使用Lambda或LINQ将类列表转换或映射到另一个类列表?

将类转换为另一个类列表的问题和答案很酷。 如何将MyData列表转换为另一个MyData2列表? 例如: List list1 = new List(); // somewhere list1 is populated List list2; // Now I need list2 from list1. How to use similar LINQ or Lambda to get list2 = … ? 在这里我尝试了这个,但我无法弄清楚完整的代码: list2 = (from x in list1 where list1.PropertyList == null select new MyData2( null, x.PropertyB, x.PropertyC). Union ( from […]

你需要“unwire”一个匿名函数/ lambda

我的理解是,用C#连接的任何事件处理程序都需要无线连接。 Object myObject = new Object(); myObject.Event += EventHandler; //Wired myObject.Event -= EventHandler; //Unwired 但是你需要取消以下代码吗? 如果是的话,怎么样? Object myObject = new Object(); myObject.Event += (object sender, EventArgs e) => { }; //Wired myObject.Event -= ????? //Unwire? How? 我的假设是不是?