我有以下代码:
Func<string, bool> comparer = delegate(string value) {
return value != "0";
};
Run Code Online (Sandbox Code Playgroud)
但是,以下内容无法编译:
var comparer = delegate(string value) {
return value != "0";
};
Run Code Online (Sandbox Code Playgroud)
为什么编译器无法弄清楚它是Func<string, bool>什么?它需要一个字符串参数,并返回一个布尔值.相反,它给了我错误:
无法将匿名方法分配给隐式类型的局部变量.
我有一个猜测,那就是如果编译var版本,如果我有以下内容,它将缺乏一致性:
var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
return false;
};
Run Code Online (Sandbox Code Playgroud)
上面没有意义,因为Func <>只允许最多4个参数(在.NET 3.5中,这就是我正在使用的).也许有人可以澄清这个问题.谢谢.
我怎样才能将 lambda 表达式写入optionObject.Forms.First(f => f.FormId == formId).MultipleIterationFunc 所以最后我有类似的东西
Func<FormObject, bool> FormID = f => f.formID == passedVal;
Run Code Online (Sandbox Code Playgroud)
然后在第一个表达式上使用它来得到类似的东西
optionObject.Forms.First(FormID).MultipleIteration
Run Code Online (Sandbox Code Playgroud)
我试过
Func<FormObject, PassedVal, bool> FormID => formID == PassedVal;
Run Code Online (Sandbox Code Playgroud)
但没有用。
请注意, lambda 表达式没有任何问题,它工作得很好。我只是想创建一个函数来用函数名称替换表达式,以使代码看起来更短且可维护。
我需要将参数(在C#中)传递给事件处理程序,然后才能分离事件处理程序.
我附加事件处理程序并传递参数:
_map.MouseLeftButtonUp += (sender, e) => _map_MouseLeftButtonUp2(sender, e, showResultsWindow);
Run Code Online (Sandbox Code Playgroud)
该事件按预期调用.我尝试分离事件处理程序:
_map.MouseLeftButtonUp -= (sender, e) => _map_MouseLeftButtonUp2(sender, e, showResultsWindow);
Run Code Online (Sandbox Code Playgroud)
代码执行时没有错误,但似乎没有分离.
如果我以更传统的方式附加事件处理程序(不传递参数):
_map.MouseLeftButtonUp+=_map_MouseLeftButtonUp;
Run Code Online (Sandbox Code Playgroud)
和分离
_map.MouseLeftButtonUp -= _map_MouseLeftButtonUp;
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作
通过更传统的方式分离事件处理程序(带参数)
_map.MouseLeftButtonUp -= _map_MouseLeftButtonUp2;
Run Code Online (Sandbox Code Playgroud)
给我一个错误,说代表不匹配(这是有道理的)
所以我的问题是:为什么在传递参数时事件处理程序并没有真正被分离,并且有办法解决这个问题.