2009-09-23 22 views
1

タイプSystem.Collection.Queueを保存しようとしています。キューには文字列のみが含まれます。問題は、私がそれを使用しようとすると、常にNullです。.NET 3.5でアプリケーション設定を使用する方法Windowsフォーム

Settings.Default.CorrectionsDescription.Enqueue(textString); 

次のエラーが発生します。

オブジェクト参照がオブジェクトのインスタンスに設定されていません。

私はStringCollectionを正常に動作させましたが、FIFOキューが必要です。

設定またはコードでキューを初期化するにはどうすればよいですか?試してみると、読んだだけであるというエラーが出ました。

+1

nullで、あなたのtextStringではなく、キューが確実ですか? – Natrium

+0

ええ、私もやったことがあります。エンクエー( "Hello World"); – Billy

答えて

1

設定では、通常、非常に単純なオブジェクトまたはコレクション(xml-serializable、Dictionary < TKey、TValue>は既に問題を引き起こしています)にのみデータを格納します。

キューには特別なセマンティクスがあり、データの格納にはあまり適していません。

私は、設定を保存し、そのコレクションに基づいて、アプリケーションの起動にキューを作成するために一覧<文字列>またはStringCollectionを使用することをお勧めします。

保存は同じですが逆の順序で行います。あなたのキューからリストを作成し、それをSettingsクラスに入れて保存します。

更新:

標準設定メカニズムは、オブジェクトの永続化のためのXMLシリアル化を使用しています。 IEnumerableを< Tを実装

OBJECT>XMLシリアライズれるメソッド追加(T値)を有していなければなりません。 キュー< T>にはこのようなメソッドがありません。したがって、正常に逆シリアル化できません。

MSDN

のXmlSerializerは、彼らが特定の要件を満たす異なった場合のIEnumerableまたはICollectionを実装したクラスを処理することができます。 IEnumerableを実装するクラスは、単一のパラメータをとるパブリックAddメソッドを実装する必要があります

+0

これは実際に実装された方法ですこれまでのところ、キューが機能しない理由を理解できませんでした。それがあれば単純化しますが、xml-serializableを読んだ後でもう少し理解しています。ありがとうKonstantin – Billy

+0

キューがシリアル化できない理由を追加しました。私はそれがあなたが設定でそれを使用しようとしているときの主な問題だと思う。 –

+0

私がキューに格納するのは文字列だけです。他のタイプのオブジェクトはありません。しかし、Nullであるため、キューに何も追加できませんでした。設計時にSettings.settingファイルを使用して初期化することはできませんし、実行時に行うこともできません。 – Billy

0

私はいつもちょうど使用している:プログラムの起動時に

if (Settings.Default.CorrectionsDescription == null) 
{ 
    Settings.Default.CorrectionsDescription = new Queue(); 
} 

を、私は同様に、より良い方法を知っていただきたいと思います。

+0

私はこれを動作させることはできません...もしそうなら、私は動いていきます。私はエラーを取得し続けます。プロパティまたはインデクサのConfigFilesTest.Properties.Settings。CorrectionsDescription 'を割り当てることはできません - それは読み取り専用です – Billy

+0

あなたの設定の範囲が "Application"に設定されている可能性があります... "User"に変更しようとすると書き込み可能になります –

関連する問題