代码之家  ›  专栏  ›  技术社区  ›  Nate Pet

ForEach子串修剪

c#
  •  -3
  • Nate Pet  · 技术社区  · 6 年前

    我有以下疑问:

    Locations.ForEach(a => a.Name = a.Name.Replace(@"/", @" ").Replace(@"\", @" ");
    

    我喜欢做的是如果名字的长度超过31个字符,我喜欢修剪到31个字符。有什么简单的方法可以做到这一点吗?对于我来说。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Rufus L    6 年前

    实现这一点的一种方法是使用 System.Linq 可拓方法 Take 从字符串的开头“获取”所需的字符数,然后 string.Concat 将这些字符合并回字符串,然后将其用于新值。

    用你的例子:

    int maxLength = 31;
    Locations.ForEach(a => 
        a.Name = string.Concat(a.Name.Replace(@"/", @" ").Replace(@"\", @" ").Take(maxLength));
    

    或者一个完整的可编译示例:

    public class Location
    {
        public string Name { get; set; }
        public override string ToString()
        {
            return Name;
        }
    }
    
    private static void Main()
    {
        var locations = new List<Location>();
        var maxLength = 5;
    
        // Populate our list with locations that have an ever growing Name length
        for (int i = 0; i < 10; i++)
        {
            locations.Add(new Location {Name = new string('*', i)});
        }
    
        Console.WriteLine("Beginning values:");
        locations.ForEach(Console.WriteLine);
    
        // Trim the values
        locations.ForEach(l => l.Name = string.Concat(l.Name.Take(maxLength)));
    
        Console.WriteLine("\nEnding values:");
        locations.ForEach(Console.WriteLine);
    
        GetKeyFromUser("\nDone! Press any key to exit...");
    }
    

    输出

    enter image description here

        2
  •  1
  •   Roman Marusyk S Kotra    6 年前

    或带有子字符串的示例:

      const int maxLength = 31;  
      Locations.ForEach(a => a.Name = a.Name
        .Substring(0, Math.Min(a.Name.Length, maxLength))
        .Replace(@"/", @" ")
        .Replace(@"\", @" "));