相关疑难解决方法(0)

为什么不能将匿名方法分配给var?

我有以下代码:

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中,这就是我正在使用的).也许有人可以澄清这个问题.谢谢.

c# lambda delegates implicit-typing .net-3.5

136
推荐指数
4
解决办法
4万
查看次数

Func&lt;T, TResult&gt; 的 Lambda 表达式

我怎样才能将 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 表达式没有任何问题,它工作得很好。我只是想创建一个函数来用函数名称替换表达式,以使代码看起来更短且可维护。

.net c# lambda func

5
推荐指数
1
解决办法
2818
查看次数

使用传递的参数附加方法后分离事件处理程序

我需要将参数(在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)

给我一个错误,说代表不匹配(这是有道理的)

所以我的问题是:为什么在传递参数时事件处理程序并没有真正被分离,并且有办法解决这个问题.

c# parameter-passing event-handling

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