我读了一个代码来发送电子邮件,这里是其中的一部分:
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实例对象.但它没有返回语句.为什么?
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的作用...
让我们说我已经生成了一个数组列表,并且我希望将它们相应地分组为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) 是否有一个简单的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 ++中像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) 我必须使用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++教程.我在工作中遇到这个问题.我见过类似的查询,但没有任何帮助我理解.
请注意:我在方法,对象,界面等术语上很糟糕.所以我可能在某处进一步犯了错误.我正在慢慢学习.
代码块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.
陷入错误:
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)
我怎样才能做到这一点?
假设我们有一个包含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) 我想通过比较一个属性来对两个匿名类型数组执行交叉.集合是具有两个属性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动态进行比较