调用 lambda 表达式而不将其分配给委托
Call lambda expression without asigned it to a delegate
在 javascript 中我们可以创建这样的箭头函数 :
let square= (a) => a * a;
然后像这样直接调用 let :
square(1, 2);
是否有使用 c# 执行类似操作的解决方案?
我试过了,但它给了我这个错误(无法推断委托类型)
var square = (x) => x * x;
您需要使用 Func type to use the lambda syntax:
声明委托(这里的方法是函数,如 JavaScript)
Func<int, int> square = value => value * value;
正如@DmitryBychenko 在他的回答中指出的那样,我们需要指定一个类型而不是使用 var
因为 C# 是一种强类型的 OOP 编译语言,而不是像 JavaScript 这样的松散类型解释.
因此我们可以称它为:
int result = square(2);
但是对于最新版本的 C#,编译器会发出警告,要求改用 local method:
int square(int value) => value * value;
Lambda 语法不是类型而是语言语法:我们不能“调用 lambda”,因为我们不能直接调用方法中的某一行代码,除非我们调用方法本身。
委托和Func/Action以及实例和本地方法都是类型:因此我们调用方法。
例如本地方法以及 Func 委托 lambda 样式完全相同:
int square(int value)
{
return value * value;
}
本地委托或 func/action 样式 (anonymous methods) 与本地方法之间略有不同。
的问题
var square = (x) => x * x;
是编译器无法从正确的值推断square
的类型。可以是
Func<int, int> square = (x) => x * x;
Func<int, double> square = (x) => x * x;
Func<double, double> square = (x) => x * x;
...
// if some MyType implements * operator
Func<MyType, MyType> square = (x) => x * x;
这就是为什么您必须手动提供所需类型的原因,例如
// We square integer (not double, not decimal) values:
// we take int and return int
Func<int, int> square = (x) => x * x;
在 javascript 中我们可以创建这样的箭头函数 :
let square= (a) => a * a;
然后像这样直接调用 let :
square(1, 2);
是否有使用 c# 执行类似操作的解决方案? 我试过了,但它给了我这个错误(无法推断委托类型)
var square = (x) => x * x;
您需要使用 Func type to use the lambda syntax:
声明委托(这里的方法是函数,如 JavaScript)Func<int, int> square = value => value * value;
正如@DmitryBychenko 在他的回答中指出的那样,我们需要指定一个类型而不是使用 var
因为 C# 是一种强类型的 OOP 编译语言,而不是像 JavaScript 这样的松散类型解释.
因此我们可以称它为:
int result = square(2);
但是对于最新版本的 C#,编译器会发出警告,要求改用 local method:
int square(int value) => value * value;
Lambda 语法不是类型而是语言语法:我们不能“调用 lambda”,因为我们不能直接调用方法中的某一行代码,除非我们调用方法本身。
委托和Func/Action以及实例和本地方法都是类型:因此我们调用方法。
例如本地方法以及 Func 委托 lambda 样式完全相同:
int square(int value)
{
return value * value;
}
本地委托或 func/action 样式 (anonymous methods) 与本地方法之间略有不同。
var square = (x) => x * x;
是编译器无法从正确的值推断square
的类型。可以是
Func<int, int> square = (x) => x * x;
Func<int, double> square = (x) => x * x;
Func<double, double> square = (x) => x * x;
...
// if some MyType implements * operator
Func<MyType, MyType> square = (x) => x * x;
这就是为什么您必须手动提供所需类型的原因,例如
// We square integer (not double, not decimal) values:
// we take int and return int
Func<int, int> square = (x) => x * x;