修剪列表中的条目<;字符串>;每次写入后
本文关键字: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时,添加的项都会自动修剪。