2013-03-21 45 views
0

我有这样一本字典:如何让我的字典参考列表<T>值?

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 

当我尝试检查列表是在初始化词典相同的文件无效,

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

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

我希望的行为是我的字典引用列表MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel。我怎样才能做到这一点?

回答

2

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

要检查属性是否为空,您需要一种每次引用字典时都会获取列表的方法。你可以改变词典Dictionary<string, Func<List<SmartTextItemModel>和分配代表使用像这样的lambda表达式的每一项:

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

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

现在,这并不完美,您应该考虑是否有完全不同的方式来解决您的问题。但是,它应该工作。

+0

好的。我不需要使用字典,但有什么别的可以将这些字符串映射到MyProgramKernel.Instance.SmartTextViewModel.SmartTextStateModel的列表? – Flames 2013-03-21 22:19:23

+0

@Flames看到我编辑的答案。 – 2013-03-21 22:26:29

+0

谢谢! Lambda表达式起作用。我将在此期间使用它。 – Flames 2013-03-22 17:32:16