每次写入</string>后修剪List <string>中的条目

时间:2013-07-05 16:39:47

标签: c# string list

我正在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也不会隐式转换。
  • 使用索引器List<string>继承get { return base[index]; } set { base[index] = value.Trim(); }。索引器不可覆盖。

2 个答案:

答案 0 :(得分:12)

  

是否有一种好方法(最好是直接替换),以便每次写入strList时,其中的每个字符串都会被自动修剪?

您不希望List<T>的行为,因此不使用List<T> 。相反,让您的方法采用IList<T>并提供执行您想要的接口的实现。

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

另见相关问题:

How do I override List<T>'s Add method in C#?

答案 1 :(得分:1)

您可以使用

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时,都会自动修剪添加的项目。