修剪列表中的条目<;字符串>;每次写入后

本文关键字:gt 字符串 lt 列表 修剪 | 更新日期: 2023-09-27 18:21:25

我正在List<string>上重复工作,以构建MyClass的实例,但为了简单起见(涉及许多正则表达式和IndexOf操作),我目前必须在每次操作后修剪每一行:

static MyClass Populate ('List<str> strList)
{
    MyClass myClassInstance = new MyClass();
    Operation1(ref strList, myClassInstance);
    TrimAllLines(strList);
    Operation2(ref strList, myClassInstance);
    TrimAllLines(strList);
    //...
    return myClassInstance;
}

有没有一种好的方法(最好是插入替换)可以让我每次向strList写入时,其中的每个字符串都会自动修剪?

我玩过的东西:

  • 对隐式转换进行修剪的string的包装器。将丢失字符串Intellisense,并且IEnumerable不会类似地隐式转换
  • 使用索引器get { return base[index]; } set { base[index] = value.Trim(); }继承List<string>。索引器不可重写

修剪列表中的条目<;字符串>;每次写入后

有没有一种好的方法(最好是插入替换)可以让我每次向strList写入时,里面的每个字符串都会自动修剪?

您不想要List<T>的行为,所以不要使用List<T>。相反,让您的方法采用IList<T>,并提供该接口的实现,以满足您的需要。

实现可能只是一个包含私有List<T>的包装类。

另请参阅此相关问题:

如何覆盖List<T>#39;s在C#中添加方法?

您可以使用

System.Collections.ObjectModel.ObservableCollection

而不是您的列表

做一些类似的事情:

    ObservableCollection<string> myCollection = new ObservableCollection<string>();
    void Init()
    {
        myCollection.CollectionChanged +=myCollection_CollectionChanged;
    }
    void myCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        myCollection.CollectionChanged -= myCollection_CollectionChanged;
        //could be a delete / clear / remove at operation
        if (e.NewItems != null)
        {
            for (int i = 0; i < e.NewItems.Count; i++)
            {
                string str = (string)e.NewItems[i];
                //the added value could be null
                if (str != null)
                {
                    string trimmed = str.Trim();                        
                    if (!trimmed.Equals(str))
                    {
                        myCollection[e.NewStartingIndex + i] = str.Trim();
                    }
                }
            }
        }
        myCollection.CollectionChanged += myCollection_CollectionChanged;
    }

之后,每次修改ObservableCollection时,添加的项都会自动修剪。