Javascript C内联lambda表达式

Javascript C内联lambda表达式,javascript,c#,Javascript,C#,这个标题太多了,甚至不确定它是否准确也没有多大意义,因此我将尝试解释我希望使用等效的javascript在C中实现什么。我非常欢迎任何关于这个问题的标题的建议。 在C中,假设我定义了这个函数: Func<string, string> getKey = entity => { switch(entity) { case "a": return "foo"; case "b": return

这个标题太多了,甚至不确定它是否准确也没有多大意义,因此我将尝试解释我希望使用等效的javascript在C中实现什么。我非常欢迎任何关于这个问题的标题的建议。 在C中,假设我定义了这个函数:

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程序: