我有这样的字典:
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
的列表。我怎么能这样做?
答案 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。)
现在,这不是很优雅,你应该考虑是否有一种完全不同的方法来解决你的问题。但是,它应该有效。