我创建了以下类:
[Serializable]
public class AppContext : IXmlSerializable {
public string reportType = string.Empty;
public string entityId = string.Empty;
// OPTIONS
public IDictionary<string, OPTIONS> dict_Options = new Dictionary<string, OPTIONS>();
// Advanced Options
public List<string> listAdvancedOptions = new List<string>();
public class OPTIONS {
public string subjectId = string.Empty;
public string varNumber = string.Empty;
}
}
如何迭代OPTIONS以获取所有varNumbers?
答案 0 :(得分:6)
方法1
foreach (KeyValuePair<string, AppContext.OPTIONS> kvp in appContext.dict_Options)
{
Console.WriteLine(kvp.Value.varNumber);
}
方法2
foreach (AppContext.OPTIONS item in appContext.dict_Options.Values)
{
Console.WriteLine(item.varNumber);
}
方法3
foreach (string item in appContext.dict_Options.Select(x => x.Value.varNumber))
{
Console.WriteLine(item);
}
答案 1 :(得分:2)
Dictionary<TKey, TVal>
实施IEnumerable<KeyValuePair<TKey, TVal>>
,请尝试以下操作:
var varNumbers = dict_Options.Select(kvp=>kvp.Value.varNumber);
您还可以直接访问字典值的IEnumerable:
var varNumbers = dictOptions.Values.Select(v=>v.varNumber);
答案 2 :(得分:1)
OPTIONS
是一个没有实现任何集合接口的类(比如IEnumerable
)。你不能迭代它。
您可以遍历字典 - dict_Options
:
foreach(var item in dict_Options)
{
// use item - say item.varNumber
}
注意:
在你的班级中设置公共字段是糟糕的设计 - 它违反了封装和信息隐藏,并且会使课程难以进化。您应该使用私有字段和公共属性来公开它们。
答案 3 :(得分:0)
如果您只想循环遍历所有varNumbers,我可能会执行以下操作:
var dict_Options = new Dictionary<string, OPTIONS>();
foreach (var varNumber in dict_Options.Select(kvp => kvp.Value.varNumber))
{
// Your code.
}