首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用/理解lambda表达式?

如何使用/理解lambda表达式?
EN

Stack Overflow用户
提问于 2012-01-18 10:10:41
回答 2查看 328关注 0票数 1

我有以下方法:

代码语言:javascript
复制
private byte[] GetEmailAsBytes(string lstrBody)
{
   byte[] lbytBody;
   ASCIIEncoding lASCIIEncoding = new ASCIIEncoding();
   lbytBody = lASCIIEncoding.GetBytes(lstrBody);
   return lbytBody;
}

我想知道是否可以将其转换为lambda表达式。我是个新手。我试过了:

代码语言:javascript
复制
Func<string> BodyToBytes = x => {
        ASCIIEncoding lASCIIEncoding = new ASCIIEncoding();
        return lASCIIEncoding.GetBytes(x);
}

但是这不能编译。简单地说,我希望将一个字符串转换为一系列字节,出于兴趣,我希望使用lambda表达式来实现此目的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-18 10:16:12

表达式Func<string>等效于不接受任何参数并返回string的函数。

您的示例显然返回了一个byte[],但是您希望它接受一个string并返回一个byte[]

要解决此问题,请更改BodyToBytes以匹配以下内容。请注意,参数的类型首先出现,以逗号分隔,然后是返回类型。在本例中,x的类型为string

代码语言:javascript
复制
Func<string, byte[]> BodyToBytes = x => {
        ASCIIEncoding lASCIIEncoding = new ASCIIEncoding();
        return lASCIIEncoding.GetBytes(x);
}

有关参考,请参见Func TypeMSDN docs

票数 6
EN

Stack Overflow用户

发布于 2012-02-01 22:59:46

我已经写了一个NUnit的例子作为我个人的理解。

代码语言:javascript
复制
    private class ld
    {
        public Boolean make<T>(T param, Func<T, bool> func) 
        {
            return func(param);
        }
    }

    private class box
    {
        public Boolean GetTrue() { return true; }
        public int Secret = 5;
    }

    [Test]
    public void shouldDemonstrateLambdaExpressions()
    {
        //Normal Boolean Statement with integer
        int a = 5;
        Assert.IsTrue(a == 5);
        Assert.IsFalse(a == 4);

        //Boolean Statement Expressed Via Simple Lambda Expression
        Func<int, bool> myFunc = x => x == 5;
        Assert.IsTrue(myFunc(5));
        Assert.IsFalse(myFunc(4));

        //Encapsuled Lambda Expression Called on Integer By Generic Class with integer
        ld t = new ld();
        Assert.IsTrue(t.make<int>(5,myFunc));
        Assert.IsFalse(t.make<int>(4, myFunc));

        //Encapsuled Lambda Expression Called on Integer By Generic Class with implicit Generics
        Assert.IsTrue(t.make(5, myFunc));

        //Simple Lambda Expression Called on Integer By Generic Class with implicit Generic
        Assert.IsTrue(t.make(20, (x => x == 20)));
        Assert.IsTrue(t.make(20, (x => x > 12)));
        Assert.IsTrue(t.make(20, (x => x < 100)));
        Assert.IsTrue(t.make(20, (x => true)));

        //Simple Lambda Expression Called on a Class By Generic Class with implicit Generic 
        //FULL LAMBDA POWER REACHED
        box b = new box();
        Assert.IsTrue(t.make(b, (x => x.GetTrue())));
        Assert.IsTrue(t.make(b, (x => x.Secret == 5)));
        Assert.IsFalse(t.make(b, (x => x.Secret == 4)));
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8904293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档