如何使用linq替换类型字符串列表中的某些特定字符串?

sre*_*enu 12 c# linq

大家好我有一些项目的类型字符串列表.我想用linq替换一些项目,我该怎么做?我的下面的代码工作正常,但我想使用linq的功能在单行代码中执行此操作.

这是我的代码:

List<string> listcolumns = columns.ToList();//Array to list

if (listcolumns.Contains("HowToReplace") && listcolumns.Contains("HowTo Replace"))
{
    int index = 0;
    index = listcolumns.IndexOf("HowToReplace");
    if (index > 0)
    {
        listcolumns.RemoveAt(index);
        listcolumns.Insert(index, "HowTo Replace");
    }
    index = listcolumns.IndexOf("HowToReplace");
    if (index > 0)
    {
        listcolumns.RemoveAt(index);
        listcolumns.Insert(index, "HowTo Replace");
    }
    columns = listcolumns.ToArray<string>();//List to array
}
Run Code Online (Sandbox Code Playgroud)

Bla*_*lau 21

与Linq:

listColumns.Select<string,string>(s => s == "HowToReplace" ? "HowTo Replace" : s).ToArray();
Run Code Online (Sandbox Code Playgroud)

没有Linq:

 for (int i=0; i<listColumns.Length; i++) 
    if (ListColumns[i] == "HowToreplace") ListColumns[i] ="HowTo Replace");
Run Code Online (Sandbox Code Playgroud)


Muh*_*han 7

static class LinqExtensions
{
    public static IEnumerable<T> Replace<T>(this IEnumerable<T> items, Predicate<T> condition, Func<T, T> replaceAction)
    {
        return items.Select(item => condition(item) ? replaceAction(item) : item);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后就可以这样使用它

var names = new[] { "Hasan", "Jack", "Josh" };
names = names.Replace(x => x == "Hasan", _ => "Khan").ToArray();
Run Code Online (Sandbox Code Playgroud)


s_n*_*air 6

List<String> lstString = new List<string> { "find", "find1","find", "find2" };

//all 'find' will be replaced with 'replace'
lstString.Select(str=>str.Replace("find","replace"));
Run Code Online (Sandbox Code Playgroud)