суббота, сентября 02, 2006

Правка настроек.

В приложении использую конфиг-файл, в котором пользователи пишут значения руками. Естественно, ляпают. Как правило, лишние символы в конце и в начале. Но соответствующие свойства класса Settings оказываются readonly (настройки для всего приложения). Да к тому же тип у настроек - StringCollection.

В итоге пришлось соорудить функцию

public delegate bool goodString(string o);
public delegate string clearString(string o);

public
StringCollection CloneCollection(StringCollection src, goodString goodFunc, clearString clearFunc) {
  
StringCollection rv = new StringCollection();
  
foreach (string t in src) {
     
string tc = clearFunc == null ? t : clearFunc(t);
     
if (goodFunc == null || goodFunc(tc))
         rv.Add(tc);
   }
  
return rv;
}

Вызов такой:

setsSearchSites = CommonTools.CloneCollection(sets.SearcSites,
delegate(string s) { return !string.IsNullOrEmpty(s); },
delegate(string s) { return s.Trim().TrimEnd("/".ToCharArray()); });

А в приложении пользуюсь уже исправленной копией параметров, с вычищенными пробелами и слешами на концах.

Комментариев нет: