0

私はこのような辞書を持っています:

private Dictionary<string, List<SmartTextItemModel>> service_ListOfItems = new Dictionary<string, List<SmartTextItemModel>>();

service_ListOfItems["bingsearch"] = MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.BingItemResults;
service_ListOfItems["wikipedia"] = MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.WikipediaItemResults;
service_ListOfItems["youtube"] = MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.YoutubeItemResults;

(SmartTextItemModelは、すべて文字列であるタイトル、説明、およびURLを含むための単純なクラスです。コンテキストについては、以前の質問を参照してください。)

もちろん、%service%ItemResultsオブジェクトのタイプはList <SmartTextItemModel>であり、SmartTextStateModelファイルではリストがnullに初期化されます。

私は他のファイルに次のMyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.%service%ItemResultsように各リストを変更するコードを持っています:

MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.%service%ItemResults = some new List of type SmartTextItemModel

辞書を初期化するのと同じファイルでリストがnullかどうかを確認しようとすると、

if (service_ListOfItems[ searchService ] == null) { ... } // searchService is "bingsearch", "wikipedia", or "youtube"

期待した結果が得られません。ifステートメントのステートメントは常に実行されます。ディクショナリのリスト値は、別のファイルに割り当てられていてもnullのままです。

私の望ましい動作は、私の辞書がでリストを参照することMyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModelです。これどうやってするの?

4

1 に答える 1

2

あなたが探している振る舞いは不可能です。リストへの参照をディクショナリに配置すると、その参照は特定のリストを参照し、アイテムの初期化に使用した静的プロパティへの将来の変更による影響を受けなくなります。

プロパティがnullかどうかを確認するには、ディクショナリを参照するたびにリストを取得するメソッドが必要です。Dictionary<string, Func<List<SmartTextItemModel>次のようにラムダ式を使用して、辞書をに変更し、各アイテムにデリゲートを割り当てることができます。

service_ListOfItems["bingsearch"] = () => MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.BingItemResultsl;

次に、を使用if (service_ListOfItems[searchService]() == null)してfuncを取得して呼び出します。(funcを呼び出す必要があるため、インデクサーの後の余分な括弧に注意してください。)

さて、これは必ずしもエレガントではありません。おそらく、問題を解決するためのまったく異なる方法があるかどうかを検討する必要があります。ただし、動作するはずです。

于 2013-03-21T22:09:41.627 に答える