Settings クラスはシングルトン パターンを使用します。つまり、一度に設定のインスタンスを 1 つだけにすることができます。したがって、そのインスタンスのコピーを作成すると、常に同じインスタンスが参照されます。
理論的には、リフレクションを使用して Settings クラスの各プロパティを反復処理し、次のように値を抽出できます。
var propertyMap = new Dictionary<string, object>();
// backup properties
foreach (var propertyInfo in Properties.Settings.Default.GetType().GetProperties())
{
if (propertyInfo.CanRead && propertyInfo.CanWrite && propertyInfo.GetCustomAttributes(typeof(UserScopedSettingAttribute), false).Any())
{
var name = propertyInfo.Name;
var value = propertyInfo.GetValue(Properties.Settings.Default, null);
propertyMap.Add(name, value);
}
}
// restore properties
foreach (var propertyInfo in Properties.Settings.Default.GetType().GetProperties())
{
if (propertyInfo.CanRead && propertyInfo.CanWrite && propertyInfo.GetCustomAttributes(typeof(UserScopedSettingAttribute), false).Any())
{
var value = propertyMap[propertyInfo.Name];
propertyInfo.SetValue(Properties.Settings.Default, value, null);
}
}
ただし、設定が複雑な場合は多少の作業が必要になる場合があります。戦略を再考する必要があるかもしれません。値をデフォルトに復元するのではなく、[OK] ボタンが押された後にのみ値をコミットできます。いずれにせよ、プロパティごとに各値を一時的な場所にコピーする必要があると思います。