【发布时间】:2011-06-25 08:00:45
【问题描述】:
我有以下代码:
Func<string, bool> comparer = delegate(string value) {
return value != "0";
};
但是,以下内容无法编译:
var comparer = delegate(string value) {
return value != "0";
};
为什么编译器不能确定它是Func<string, bool>?它接受一个字符串参数,并返回一个布尔值。相反,它给了我错误:
无法将匿名方法分配给 隐式类型的局部变量。
我有一个猜测,那就是如果编译了 var 版本,如果我有以下情况,它将缺乏一致性:
var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
return false;
};
以上内容没有意义,因为 Func 最多只允许 4 个参数(在 .NET 3.5 中,这是我正在使用的)。也许有人可以澄清这个问题。谢谢。
【问题讨论】:
-
注意您的 4 个参数 参数,在 .NET 4 中,
Func<>最多接受 16 个参数。 -
感谢您的澄清。我正在使用 .NET 3.5。
-
为什么会让编译器认为这是
Func<string, bool>?对我来说,它看起来像Converter<string, bool>! -
有时我会想念VB ..
Dim comparer = Function(value$) value <> "0"
标签: c# .net-3.5 delegates lambda implicit-typing