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

时间:2011-11-09 09:45:16

标签: 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
}

3 个答案:

答案 0 :(得分:21)

Linq:

listColumns.Select<string,string>(s => s == "HowToReplace" ? "HowTo Replace" : s).ToArray();

没有Linq:

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

答案 1 :(得分: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);
    }
}

然后就可以这样使用

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

答案 2 :(得分: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"));