新しいアプリケーションの作成を開始しようとしており、設定の保存方法を整理したいと考えていました。独自の設定システムを作成することも検討しましたが、.NET が提供するビルドアプリケーションの設定を完全にテストする必要があると判断しました。だから私はそれについて読んで、いくつかのテストコードを作成しました。うまくいきました。私が望んでいた主なことは、簡単にできる値をリセットする方法でしたが、リセットを設定ファイルに自動的に保存せずにこれを行いたかったのです。
そこで、設定クラスの各プロパティをループし、デフォルト値を使用して現在の値を更新する次のコードを作成します。
foreach (SettingsProperty sp in Settings.Default.Properties)
{
PropertyInfo propertyInfo = Settings.Default.GetType().GetProperty(sp.Name);
if (propertyInfo.CanWrite)
{
// Either convert from a string or de-serialize from XML
object value;
switch (sp.SerializeAs)
{
case SettingsSerializeAs.String:
TypeConverter converter = TypeDescriptor.GetConverter(sp.PropertyType);
value = converter.ConvertFromInvariantString(sp.DefaultValue.ToString());
break;
case SettingsSerializeAs.Xml:
XmlSerializer serializer = new XmlSerializer(sp.PropertyType);
StringReader reader = new StringReader(sp.DefaultValue.ToString());
value = serializer.Deserialize(reader);
break;
default:
throw new FormatException(
string.Format(
Resources.ExceptionResetNoSaveSerializeAsInvalid,
sp.SerializeAs));
}
propertyInfo.SetValue(Settings.Default, value, null);
}
}
switch
文字列から変換するためのコードなしで始めました。私の最初の試みはこれを使用していました: converter.ConvertFromString
. これは、プレーン テキストと GUID 値だけでも問題なく機能しましたが、日付では失敗しました。
(シリアル化されたコンテンツも機能するように追加した XML 部分ですが、それはこの質問の焦点ではありません)
オリジナルconverter.ConvertFromString
は日付に失敗しました。私のテストでは、「31/08/2012 11:25」を使用していました。私は Settings.Designer.cs ファイルを見て、デフォルト値がどこにどのように保存されているかを確認していましたが、これが上記の日付のデフォルトを保存する方法であることに気付きました。
[global::System.Configuration.DefaultSettingValueAttribute("08/31/2012 11:25:15")]
私はオンラインで検索してきましたが、Visual Studio 2010 デザイナーで dd/mm/yyyy 形式を入力すると、自動生成コードで mm/dd/yyyy 形式が使用される理由を説明する参照が見つかりません。
上記の例でわかるように、使用できることがわかりconverter.ConvertFromInvariantString
、日付エラーはなくなりましたが、違いを説明するドキュメントがあるかどうかを知りたい. 他の誰かがこれに出くわしましたか?