C# 如何使用LINQ C根据另一个字符串更改字符串内容#

C# 如何使用LINQ C根据另一个字符串更改字符串内容#,c#,string,linq,stringbuilder,C#,String,Linq,Stringbuilder,在我的家庭作业中,我有一个任务,就是复制谜之机。 所以我正在建造反射器部分。 反射器具有如下配置: public string GetReflectedString(string msg) { StringBuilder answer = new StringBuilder(); foreach (char item in msg) { answer.Append(m_configuration[Helper.ABC.IndexOf(item.ToStri

在我的家庭作业中,我有一个任务,就是复制谜之机。 所以我正在建造反射器部分。 反射器具有如下配置:

public string GetReflectedString(string msg)
{
    StringBuilder answer = new StringBuilder();
    foreach (char item in msg)
    {
        answer.Append(m_configuration[Helper.ABC.IndexOf(item.ToString().ToUpper())]);
    }
    return answer.ToString();
}
YRUHQSLDPXNGOKMIEBFZCWVJAT

任务是针对字符串中的每个字符, 我需要在配置位置用相应的字符替换它, 假设文本只包含大写字母。 例如,假设我有这样一个输入:

public string GetReflectedString(string msg)
{
    StringBuilder answer = new StringBuilder();
    foreach (char item in msg)
    {
        answer.Append(m_configuration[Helper.ABC.IndexOf(item.ToString().ToUpper())]);
    }
    return answer.ToString();
}
ABCXYZ

所以答案是 “YRUJAT”

所以我做了一个这样的函数:

public string GetReflectedString(string msg)
{
    StringBuilder answer = new StringBuilder();
    foreach (char item in msg)
    {
        answer.Append(m_configuration[Helper.ABC.IndexOf(item.ToString().ToUpper())]);
    }
    return answer.ToString();
}
但我觉得这可以通过LINQ函数来实现。 有人能帮忙吗?

我不一定会更好地使用这些词,但可能会使用更少的代码行,下面是一个使用linq的实现:

var result = new string(msg.Select(c => m_configuration[Helper.ABC.IndexOf(c)]).ToArray());
糟糕的是,将
foreach
替换为投影(
。选择
),然后将其全部作为
字符串
构造函数的输入

作为一个简短的独立示例:

var configuration = "YRUHQSLDPXNGOKMIEBFZCWVJAT";
var abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

var input = "ABCXYZ";
var result = new string(input.Select(c => configuration[abc.IndexOf(c)]).ToArray());
Console.WriteLine(result);    // YRUJAT

为什么更好?林克不是魔法。我同意它形成了很好的代码,但除了惰性加载和很好的方法链接(至少在内存中是这样)@GiladGreen我不得不注意到,您将EF/Linq2SQL/nHibernate的复杂特性归因于Linq。Linq不是魔术,它只是一个API/接口集。是的,这正是我想要的。你会使用Linq还是foreach?@DorLugasi-我会选择Linq,因为我喜欢它的外观。我只是想强调一下,它与您在问题中所展示的没有太大不同。是的,我知道其背后的功能是相同的。我更喜欢LINQ,这就是为什么我问,也许我应该更好地解释我自己。不管怎样,谢谢你的帮助