2013-06-14 2 views
2

Я пытаюсь найти элегантный способ удалить данные, которые содержатся в списке из одной строки. Простой полный пример приведен ниже, что делает не работы:удалить часть строки, которая находится в списке

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), но я не вижу его. Все же.

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

3

Replace() фактически не изменяет строку. Вам нужно написать возвращаемое значение обратно в исходную строку, если вы хотите, чтобы сохранить изменения:

domainSuffixes.ForEach(x => siteName = siteName.Replace(x, "")); 
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, не прибегая к циклу.

Надеюсь, у меня тоже нет проблем с размещением этого решения. Я отвечу Джастину как ответ.

Смежные вопросы