c# - C# 代码语法中的 "s"和 "e"是什么

标签 c#

我看到一些这样的代码:

textBox.TextChanged += (s, e) => this.Foo();

但我不知道“s”和“e”是什么?对于这行代码,我应该在 C# 中研究什么主题?

最佳答案

它们是 lambda 函数的参数。

编译器从上下文中推断出它们的类型,但允许编写更长(信息量更大)的形式:

 textBox.TextChanged += (object s, EventArgs e) => { this.Foo(); };

在这种表示法中,更容易看出它们是方法参数。
=> 的另一边是方法体。


回应评论:

Now is there a way to also rewrite the same lambda expression I have in a simpler C# syntax?

是的,您始终可以使用经典表示法。虽然这可能不会“更好”或什至“更简单”,但当您学习它时会更容易理解。

// The setup method
void MyMethod()
{
   //textBox.TextChanged += new Eventhandler(MyTextChangedHandler);  // C#1 and later
   textBox.TextChanged += MyTextChangedHandler;                      // C#2 and later
}

// The subscribed method. The lambda is an inline version of this. 
private void MyTextChangedHandler(object s, EventArgs e)
{ 
   this.Foo(); 
}

关于c# - C# 代码语法中的 "s"和 "e"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533035/

相关文章:

c# - 我如何在新的 coreclr 世界中模拟对象?

c# - 如何使用变量更改sql登录密码

c# - ITypedList 替代品?

c# - 如何格式化 DateTime?在 C# 中?

c# - 在移动到上一条或下一条记录之前,数据绑定(bind)不更新数据库

c# - 试图找到控件

c# - 从非结构化消息中提取数据的模式

c# - 如何在 C#/Winforms 中将队列绑定(bind)到 DataGridView?

c# - 没有 UI 线程的任务同步

c# - 覆盖 Telerik Radgrid 数据绑定(bind)