Javascript C内联lambda表达式
这个标题太多了,甚至不确定它是否准确也没有多大意义,因此我将尝试解释我希望使用等效的javascript在C中实现什么。我非常欢迎任何关于这个问题的标题的建议。 在C中,假设我定义了这个函数:Javascript C内联lambda表达式,javascript,c#,Javascript,C#,这个标题太多了,甚至不确定它是否准确也没有多大意义,因此我将尝试解释我希望使用等效的javascript在C中实现什么。我非常欢迎任何关于这个问题的标题的建议。 在C中,假设我定义了这个函数: Func<string, string> getKey = entity => { switch(entity) { case "a": return "foo"; case "b": return
Func<string, string> getKey = entity => {
switch(entity) {
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
};
string key = getKey(/* "a", "b", or something else */);
我该怎么用C写呢?我试过:
string key = (entity => {
switch(entity) {
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
})(/* "a", "b", or something else */);
但是我得到了语法错误CS0149:应该是方法名。
谢谢大家,干杯。在国际海事组织,最接近的等价物是:
var key = new Func<string, string>(entity =>
{
switch (entity)
{
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
})("a");
在国际海事组织中,最接近的等效值为:
var key = new Func<string, string>(entity =>
{
switch (entity)
{
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
})("a");
C是一种编译语言,因此在许多方面不同于javascript。你想要的是一个结束。这些在C语言中是可能的,例如Linq 但我认为,通过扩展方法可以很好地解决您正在寻找的问题: 编辑:使用Linq的相同程序:
using System;
using System.Linq;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new[] { "a" }.Select(entity =>
{
switch (entity)
{
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
}).First());
Console.ReadKey();
}
}
}
您可以将Select视为功能术语中的映射。希望这有帮助 C是一种编译语言,因此在许多方面不同于javascript。你想要的是一个结束。这些在C语言中是可能的,例如Linq 但我认为,通过扩展方法可以很好地解决您正在寻找的问题: 编辑:使用Linq的相同程序:
using System;
using System.Linq;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new[] { "a" }.Select(entity =>
{
switch (entity)
{
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
}).First());
Console.ReadKey();
}
}
}
您可以将Select视为功能术语中的映射。希望这有帮助 您可以将其命名为C内联lambda表达式您可以将其命名为C内联lambdaexpression@iggymoran我正要写同样的东西;我先用了一个,效果很好,谢谢@Dennis@伊格莫兰我正要写同样的东西;我先用了一个,效果很好,谢谢@Dennis!我知道这与闭包有关,因为这也是等效javascript代码的全部内容。我只是害怕使用这个词:关于你的答案:整洁,但太麻烦了,我的整个想法是保存代码,因为我只需要在那个地方关闭;否则我也会选择扩展方法。您可以使用Linq在列表上编写闭包,但它们不适用于单个值,正如您在示例中看到的,我必须用单个值实例化一个数组。Linq的前一个程序:我知道它与闭包有关,因为这也是等效javascript代码的全部内容。我只是害怕使用这个词:关于你的答案:整洁,但太麻烦了,我的整个想法是保存代码,因为我只需要在那个地方关闭;否则我也会选择扩展方法。您可以使用Linq在列表上编写闭包,但它们不适用于单个值,正如您在示例中看到的,我必须用单个值实例化一个数组。以前的Linq程序: