Обрезка записей в списке <string> после каждой записи

Вопрос:

Я делаю повторную работу над 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 аналогичным образом не преобразуется неявно.
  • Inheriting List<string> с get { return base[index]; } set { base[index] = value.Trim(); } get { return base[index]; } set { base[index] = value.Trim(); } get { return base[index]; } set { base[index] = value.Trim(); }. Индексатор не является переопределяемым.
Лучший ответ:

Вы можете использовать

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 будет изменен, добавленные элементы будут автоматически обрезаны.

Ответ №1

Есть ли хороший способ (желательно замена замены), чтобы сделать так, чтобы каждый раз, когда я пишу в strList, каждая строка внутри автоматически обрезается?

Вам не нужно поведение List<T>, поэтому не используйте List<T>. Вместо этого сделайте свой метод IList<T> и обеспечьте реализацию этого интерфейса, который сделает то, что вы хотите.

Реализация может просто быть классом-оболочкой, который содержит закрытый List<T>.

См. Также этот связанный вопрос:

Как переопределить метод добавления List <T> на С#?

Оцените статью
TechArks.Ru
Добавить комментарий