Красота в одной строке
ls | cat -n | while read n f; do mv "$f" "$n.extension"; done
изменить расширение с помощью нужного PNG, Jpg или некоторого другого.
Я не знаю ни о каком библиотека , который делает это - но Вы могли записать свое собственное довольно легко.
Вот основание, которое я поднял за несколько минут, который устанавливает два пути привязка данных между двумя простыми свойствами:
public static class Binder
{
public static void Bind(
INotifyPropertyChanged source,
string sourcePropertyName,
INotifyPropertyChanged target,
string targetPropertyName)
{
var sourceProperty
= source.GetType().GetProperty(sourcePropertyName);
var targetProperty
= target.GetType().GetProperty(targetPropertyName);
source.PropertyChanged +=
(s, a) =>
{
var sourceValue = sourceProperty.GetValue(source, null);
var targetValue = targetProperty.GetValue(target, null);
if (!Object.Equals(sourceValue, targetValue))
{
targetProperty.SetValue(target, sourceValue, null);
}
};
target.PropertyChanged +=
(s, a) =>
{
var sourceValue = sourceProperty.GetValue(source, null);
var targetValue = targetProperty.GetValue(target, null);
if (!Object.Equals(sourceValue, targetValue))
{
sourceProperty.SetValue(source, targetValue, null);
}
};
}
}
, Конечно, этот код испытывает недостаток в нескольких тонкостях. Вещи добавить включают
source
и target
присвоены sourcePropertyName
и targetPropertyName
, существуют кроме того, Отражение является относительно медленным (хотя сравнительный тест это прежде, чем отбросить его, он не , что медленный), таким образом, Вы могли бы хотеть использовать скомпилированные выражения вместо этого.
Наконец, учитывая, что определение свойств строкой подвержено ошибкам, Вы могли использовать выражения Linq и дополнительные методы вместо этого. Тогда вместо того, чтобы писать
Binder.Bind( source, "Name", target, "Name")
Вы могли записать
source.Bind( Name => target.Name);
AutoMapper может скопировать значения между двумя экземплярами, но необходимо написать собственный код, чтобы заставить это произойти автоматически.
Возможно Связываемый LINQ или непрерывный linq может помочь здесь. При попытке добавить свойства модели, которые являются на самом деле "полученными свойствами" Ваших фактических, обновляющих данных, для помощи Вам UI для привязки с, эти две платформы должны помочь.
Если бы Вы определили свои свойства как DependencyProperty, то Вы могли бы сделать это. И WF и WPF имеют реализацию его (первая ссылка для WPF. Для WF это этот один), таким образом, необходимо решить, чтобы использовать - но оба должны быть достаточными для потребностей.