如何让我的字典引用List <t>值?</t>

时间:2013-03-21 22:05:30

标签: c# dictionary windows-phone-8

我有这样的字典:

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&lt; SmartTextItemModel&gt;类型,并且列表在SmartTextStateModel文件中初始化为null。

我在其他文件中有代码修改每个MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel.%service%ItemResults列表,如下所示:

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

当我尝试在初始化字典的同一文件中检查列表是否为空时,

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

我没有得到我期望的结果。 if语句中的语句总是运行。字典中的List值仍为null,即使它们已分配到不同的文件中。

我希望的行为是我的词典引用了MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel的列表。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您正在寻找的行为是不可能的。在字典中对List进行引用后,该引用将引用特定的List,并且不会受到用于初始化项目的静态属性的未来更改的影响。

要检查属性是否为null,您需要一个方法,每次引用字典时都会获取列表。您可以将字典更改为Dictionary<string, Func<List<SmartTextItemModel>,并使用lambda表达式为每个项目分配委托:

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

然后使用if (service_ListOfItems[searchService]() == null)来获取并调用func。 (注意索引器之后的额外括号,因为你必须调用func。)

现在,这不是很优雅,你应该考虑是否有一种完全不同的方法来解决你的问题。但是,它应该有效。