C# 为什么在将委托函数分配给委托变量时必须声明参数类型?
假设我有一个这样的代表C# 为什么在将委托函数分配给委托变量时必须声明参数类型?,c#,types,delegates,C#,Types,Delegates,假设我有一个这样的代表 namespace somedelegatesb1 { class Program { delegate int Abc(int a); static void Main(string[] args) { Abc abc = delegate(int e) { return 0; }; } } } 为什么我必须在这里写
namespace somedelegatesb1 {
class Program {
delegate int Abc(int a);
static void Main(string[] args) {
Abc abc = delegate(int e) {
return 0;
};
}
}
}
为什么我必须在这里写参数int e
Abc abc = delegate(int e) {
return 0;
};
为什么我不能写
Abc abc = delegate(e) {
return 0;
};
它不会编译,但它不是“明显”是INTE吗?还会是什么?它不可能是除int e以外的任何东西,因为委托需要int e
假设我没有使用一个参数,也就是说,函数将接受一个参数,但表示它不会使用变量。那就毫无意义了。为什么我不能写
Abc abc = delegate {
return 0;
};
即使我使用了一个参数。。变量名不一定是相关的,例如在javascript中,您可以说参数[0]。那么为什么不允许Abc=delegate{…}代码>
我知道C#是严格类型的,但我不建议在委托后编写类型时更改类型。我并不是建议c#允许传递比已经定义的更多或更少的参数。写这个字是多余的。即使在某些情况下变量名也是不必要的,例如,如果不使用它,尽管人们通常会使用它,因此我可以理解为什么他们可能会强制使用它,但这里的类型肯定是绝对不必要和毫无意义的。那么为什么C#似乎需要它呢?因为匿名方法的语言规范说必须这样做。这是无可争辩的。使用lambda表达式代替。C#中的类型推断非常愚蠢(正如您所注意到的)-如果您想要更好的东西,请使用F#)(这只是开始-但在.net ATM上是结束)@HansPassant a lambda是一种匿名方法(它只是得到了C#中的特殊处理/语法-如果您不想详细指定您的参数,您可以使用它,也可以不声明类型(大多数时候))。。。请改用lambda。最后一个示例实际上是法律代码:Abc=delegate{return 0;}代码>(C#6.0)