C# 单行匿名方法

C# 单行匿名方法,c#,C#,我有个问题。考虑一下: public override string Encrypt(string input) { Func<char, char> encryption = (c) => (char)chars[(c * k1 + k0) % 26]; string result = string.Empty; foreach(char c in input) result +=

我有个问题。考虑一下:
    public override string Encrypt(string input)
    { 
        Func<char, char> encryption = (c) => (char)chars[(c * k1 + k0) % 26]; 

        string result = string.Empty;
        foreach(char c in input)
            result += encryption(c);

        return result;
    }

我的问题是,我们可以将结果+=encryptionc行更改为类似于Func声明的内容吗?我们可以把这个匿名方法写在一行吗?

您可以这样做:

result = string.Concat(input.Select(c => encryption(c)))
你可以尝试使用Linq,i。e


这并不是说它可读性很强,而是整个方法简化为一行:

public override string Encrypt(string input) => string.Concat(input.Select(c => (char)chars[(c * k1 + k0) % 26]));

结果=string.Concatinput.Selectc=>encryptionc;谢谢您能解释一下,为什么我们需要string.Concat,为什么当我们只想使用input.Select时会出现异常?这条线后面是什么样的逻辑?这种方式不是太多的函数式编程方式吗?我们可以在OOP中使用它吗?string.Concat将Select返回的IEnumerable转换为string。当使用Linq进行查询时,我们使用IEnumerable,对于字符串,我们将其视为IEnumerable字符序列,最终我们希望将其具体化为字符串
public override string Encrypt(string input) => 
   string.Concat(input.Select(c => (char)chars[(c * k1 + k0) % 26]));
public override string Encrypt(string input) => string.Concat(input.Select(c => (char)chars[(c * k1 + k0) % 26]));