标签: lambda

为什么lambda表达式没有返回值?

我读了一个代码来发送电子邮件,这里是其中的一部分:

MailUserState state = new MailUserState()
{
    AutoReleaseSmtp = m_autoDisposeSmtp,
    CurMailMessage = mMailMessage,
    CurSmtpClient = m_SmtpClient,
    IsSmpleMail = true,
    UserState = AsycUserState,
};
if (m_autoDisposeSmtp)
  m_SmtpClient = null;

ThreadPool.QueueUserWorkItem((userState) =>
{
    MailUserState curUserState = userState as MailUserState;
    curUserState.CurSmtpClient.SendAsync(mMailMessage, userState);
}, state);
Run Code Online (Sandbox Code Playgroud)

为什么lambda表达式没有返回值?

我认为它应该返回一个callback实例对象.但它没有返回语句.为什么?

c# lambda

0
推荐指数
1
解决办法
508
查看次数

什么是tbb中parallel_reduce的Reduce?

parallel_reduce 提供2个接口,lambdas的一个可以像上一个链接中显示的那样使用

#include "tbb/parallel_reduce.h"
#include "tbb/blocked_range.h"

using namespace tbb;

float ParallelSum( float array[], size_t n ) {
    return parallel_reduce( 
        blocked_range<float*>( array, array+n ), 
        0.f, 
        [](const blocked_range<float*>& r, float init)->float {
            for( float* a=r.begin(); a!=r.end(); ++a ) 
                init += *a;
            return init;
        },
        []( float x, float y )->float { // what this lambda does ?
            return x+y;
        }
    );                    
}
Run Code Online (Sandbox Code Playgroud)

第二个lambda符合const Reduction& reduction签名,我正在研究这个lambda试图改变身体或价值观,但它确实没有做任何事情(即使我把一个cout内部,没有任何事情发生),看起来它完全没有任何理由.

这是什么目的Reduction?与此有关0f?我得到的0f是一个用于检测可以跳过的值的谓词,但我仍然无法弄清楚lambda的作用...

c++ lambda multithreading tbb c++11

0
推荐指数
1
解决办法
1722
查看次数

如何用lambda表达式替换LINQ查询

让我们说我已经生成了一个数组列表,并且我希望将它们相应地分组为8.这是我如何用LINQ做的,但我想知道如何使用labmda表达式:

Random rnd = new Random();
var intArray = new List<int>();
for (int i = 0; i < 99; i++)
{
    intArray.Add(rnd.Next(20, 50));
}
var randomLettersSortedAsc =
    from element in intArray
    group element by element % 8 into g
    select g;
Run Code Online (Sandbox Code Playgroud)

c# linq arrays lambda

0
推荐指数
1
解决办法
144
查看次数

C#,Lambda将元素从一个列表传输到另一个列表

是否有一个简单的lambda表达式从一个列表中提取元素并将它们放入另一个列表中?没有LINQ?

例如,将元素T的源列表映射到另一个列表(或返回列表),其中包含源中每个元素的字符串名称.

使用伪代码更新...

List<int> intList = new List<int>() { 1, 2, 3};         
List<string> stringList = new List<string>(intList.ToArray((i) => intList[i].ToString())); // this doesn't work obviously
Run Code Online (Sandbox Code Playgroud)

stringList应为{"1","2","3"}

c# lambda

0
推荐指数
1
解决办法
553
查看次数

C++ lambda值无法捕获

这是我的代码,我想在c ++中像javascript一样测试闭包.为什么编译器会产生此消息?"testLambda.cpp:在lambda函数中:testLambda.cpp:8:11:错误:'a'未被捕获"

    #include <iostream>
    #include <functional>
    std::function<bool(int)> returnLambda(int a){
        auto b  = 1;
        auto c  = 2;

        return [&](int x)
        {   return x*(b++)+c+a == 0;};
    }
    auto f = returnLambda(21);
    int main(){
        auto c = f(1);
        auto b = f(1);

        std::cout<<c<<b<<std::endl;
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++ lambda

0
推荐指数
1
解决办法
1371
查看次数

使用'is'运算符将foreach转换为LINQ

我必须使用LINQ/Lambda而不是ForEach循环.以下是我的代码

List<CatalogItem> catalogItems = new List<CatalogItem>();
foreach (TreeViewItem item in this.SelectedItems)
{
    if (item.DataContext is CatalogItem)
    {
        catalogItems.Add((CatalogItem)item.DataContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何在LINQ中使用'is'运算符.

我试过了

this.SelectedItems
    .Where(item => item.DataContext is CatalogItem)
    .Select(item => item.DataContext)
Run Code Online (Sandbox Code Playgroud)

但没有得到理想的结果.请帮忙.

c# linq lambda

0
推荐指数
1
解决办法
177
查看次数

无法从用法中推断出方法的类型参数.(c#,lambda)

首先,我是高级程序设计的完全初学者.我所做的就是在网上找到的C++教程.我在工作中遇到这个问题.我见过类似的查询,但没有任何帮助我理解.

请注意:我在方法,对象,界面等术语上很糟糕.所以我可能在某处进一步犯了错误.我正在慢慢学习.

代码块1:

public static class DummyClassName
{
    public static T DummyTemplateFunc<T>(DummyInterfaceName aaa1, Func<T> action)
    {
        T DummyVal = action();
        // blah blah code
        // blah blah code

        return val;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码块2:

public class ClassName2 : blah1 , blah2, blah3
{
    public void Method1(string DummyString)
     {
         DummyClassName.DummyTemplateFunc(_aaa1, ()=>Function1(_arg1, arg2));
     }
}
Run Code Online (Sandbox Code Playgroud)

我会尽力解释发生了什么事情.第二位代码在程序中反复使用,使用不同的函数(或方法?)代替Function1.(这些函数来自与此链接的C++程序.我不知道如何)

如果这些函数具有任何返回类型EXCEPT void,则程序运行正常.

如果使用void-return-type函数,我会收到错误

"The type arguments for method '****.****.DummyClassName.DummyTemplateName<T>
(****.****.DummyInterfaceName, System.Func<T>)' cannot be inferred from the usage. 
Try specifying the type arguments explicitly.' 
Run Code Online (Sandbox Code Playgroud)

据我所知,这是因为当传递一个void函数时,它取代了第一个代码块中的T并尝试返回'val'.这就是抛出错误的原因.

有人可以帮我找到解决方法吗?我不介意专门定义一个完全不同的类/方法来处理void函数.我知道哪些函数的返回类型为void.

c# lambda void

0
推荐指数
1
解决办法
1051
查看次数

Lambda表达式作为动态调度操作的参数

陷入错误:

Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
Run Code Online (Sandbox Code Playgroud)

举一个简单的例子,让我们尝试使用实体框架从数据库中获取一个对象,而不是实际知道它的类型:

private DbContext db;
private dynamic test(dynamic entity)
{
    return db.Set(entity.GetType()).First(x => x.Id == entity.Id);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

c# linq lambda

0
推荐指数
1
解决办法
6255
查看次数

列表采取某些项目跳过remaning

假设我们有一个包含156个项目的列表,我们需要在50个批次中使用take和skip方法,我已经完成了以下代码,但不知道如何跳过以前的项目,如果其余代码是正确的:

var mailAccounts = mailRepo.GetAllMailAccounts();
            int total = mailAccounts.Count;
            int batch = 50;
            int batchNumbers = total / batch;
            for (int i = 0; i < batchNumbers; i++)
            {
                mailAccounts.Skip(Previous Items).Take(batch);
                await FetchEmails(mailAccounts);
            }
Run Code Online (Sandbox Code Playgroud)

c# linq lambda list

0
推荐指数
1
解决办法
139
查看次数

使用Lambda Comparer交叉匿名类型

我想通过比较一个属性来对两个匿名类型数组执行交叉.集合是具有两个属性Id和Name的任意类型的数组.例如,给定集合一:

{ 1, "Bob",
  2, "Jane",
  3, "Fred" }
Run Code Online (Sandbox Code Playgroud)

和收集二:

{ 2, "",
  3, "",
  4, "" }
Run Code Online (Sandbox Code Playgroud)

是否可以编写一个Intesect语句来抓取基于Id的交集并获取非空白的名称,因此结果将是

{ 2, "Jane",
  3, "Fred" }
Run Code Online (Sandbox Code Playgroud)

现在我有

var data = one.Intersect(two, (x, y) => x.Id == y.Id).ToArray();
Run Code Online (Sandbox Code Playgroud)

但我不知道如何处理名称解析或如何使用lambda动态进行比较

c# linq lambda

0
推荐指数
1
解决办法
520
查看次数

标签 统计

lambda ×10

c# ×8

linq ×5

c++ ×2

arrays ×1

c++11 ×1

list ×1

multithreading ×1

tbb ×1

void ×1