删除列表中找到的字符串部分

时间:2013-06-14 02:21:53

标签: c# lambda

我正在尝试找到一种优雅的方法来从单个字符串中删除列表中包含的数据。下面显示了一个简单的完整示例 not work:

private string removeWebSuffixes()
{ 
    string siteName="someSite.com";

    List<string> siteNames=new List<string>{siteName};
    List<string> domainSuffixes=new List<string>{".net",".com",".gov"};

    domainSuffixes.ForEach(x=>siteName.Replace(x,""));

    return siteName;//actually, should return result of siteName.replace statement
}

我认为这个例子不能正常工作,因为替换语句没有将值返回给任何东西,但我已经包含它,因为我认为它清楚地传达了我想要完成的事情。

我打赌有一个很容易做到这一点(我并不是指一个foreach循环),但我没有看到它。爱好。

2 个答案:

答案 0 :(得分:3)

Replace()实际上并未更改字符串。如果要保留更改,则需要将返回值写回原始字符串:

domainSuffixes.ForEach(x => siteName = siteName.Replace(x, ""));

答案 1 :(得分:0)

以下是我在看到贾斯汀回应之前想出的:

private string removeDomainSuffix(string siteName)
{ 
    List<string> siteNames=new List<string>(){siteName};
    List<string> domainNames=General.GetWebDomains();

    var truncated= 
    (
      from sites in siteNames
      from suffixes in domainNames
      select new { results=(sites.Replace(suffixes,"")) }
      ).OrderBy(x=>x.results.Length).Take(1); 

    foreach(var v in truncated)
      return (string.Format("{0}",v.results));

    return siteName;
}

它有效,但它不如他的那么好,我无法弄清楚如何在不诉诸循环的情况下从var中获取单个字符串。

希望我也不会在此处发布此解决方案。我将贾斯汀的标记作为答案。