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
}

この例は、replace ステートメントが値を返さないため機能しないと思いますが、私が達成しようとしていることを明確に伝えていると思うので、含めました。

これを行うのは簡単だと思いますが(foreachループを意味するわけではありません)、私はそれを見ていません。まだ。

4

2 に答える 2

3

Replace()実際には文字列を変更しません。変更を保持したい場合は、戻り値を元の文字列に書き戻す必要があります。

domainSuffixes.ForEach(x => siteName = siteName.Replace(x, ""));
于 2013-06-14T02:23:12.187 に答える
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から単一の文字列を取得する方法がわかりませんでした。

このソリューションをここにも投稿することで問題が発生しないことを願っています。ジャスティンのものを答えとしてマークします。

于 2013-06-14T03:08:49.737 に答える