C# 读取字典元素值

C# 读取字典元素值,c#,linq,dictionary,C#,Linq,Dictionary,我有下面的代码,我想使用for循环读取字典“filter”的值。“filter[1]”也有两个值。因为dictionary是键值对,所以如何访问下面的元素值 类程序 { 公共字符串RecSys{get;set;} 公共字符串AnsSys{get;set;} 公共字符串IsAddOn{get;set;} 公共字符串国家{get;set;} 公共静态void Main() { 程序p1=新程序(); 程序p2=新程序(); 程序p3=新程序(); 列表=新列表(); p1.RecSys=“RY1”;

我有下面的代码,我想使用for循环读取字典“filter”的值。“filter[1]”也有两个值。因为dictionary是键值对,所以如何访问下面的元素值

类程序
{
公共字符串RecSys{get;set;}
公共字符串AnsSys{get;set;}
公共字符串IsAddOn{get;set;}
公共字符串国家{get;set;}
公共静态void Main()
{
程序p1=新程序();
程序p2=新程序();
程序p3=新程序();
列表=新列表();
p1.RecSys=“RY1”;
p1.AnsSys=“CSCLRC”;
p1.IsAddOn=“P”;
p1.国家=“印度”;
列表。添加(p1);
p2.RecSys=“RY1”;
p2.AnsSys=“顶点”;
p2.IsAddOn=“主”;
p2.国家=“巴基斯坦”;
列表。添加(p2);
p3.RecSys=“RY1”;
p3.AnsSys=“顶点”;
p3.IsAddOn=“加载项”;
p3.国家=“巴基斯坦”;
列表。添加(p3);
var filter=List.GroupBy(item=>new{item.RecSys,item.AnsSys}).ToDictionary(grp=>grp.Key,grp=>grp.ToList()).value;
for(int i=0;i

}

您可以使用两个
foreach
循环获取值,如下所示:-

foreach (var item in filter)
{
    foreach (var innerItem in item)
    {
         Console.WriteLine(innerItem.IsAddOn);
         Console.WriteLine(innerItem.Country);
         //and so on..
    }
}
或者,如果您希望同时使用字典的所有
,则可以使用以下方法将其展平:-

最后,使用单个
foreach
循环迭代项目:-

foreach (var item in filter)
{
    Console.WriteLine(item.Country);
    Console.WriteLine(item.AnsSys);
    //and so on..
}

第二个示例(使用
SelectMany
)基本上生成了原始列表,您不知道为什么要创建
词典,然后只使用
值。而且
ToDictionary
完全是多余的。@IvanStoev-这取决于OP,他可能只是发布了样本数据,这就是为什么我提到如果你想同时获得字典中的所有值。@Rahul Singh在第二个foreach中我们可以通过IsAddon订购吗?你可以直接在查询中完成,但在@Ivan Stoev的评论之后,我也弄不明白为什么你要投影字典,然后获取值?预期的输出是什么?它是否是样本数据并不重要。整个操作毫无意义,因为
GroupBy
后跟
SelectMany
只生成原始序列,只是顺序不同,所以他很可能只需要
OrderBy
。只是想。
var filter = List.GroupBy(item => new { item.RecSys, item.AnsSys })
                 .ToDictionary(grp => grp.Key, grp => grp.ToList())
                 .SelectMany(x => x.Value);
foreach (var item in filter)
{
    Console.WriteLine(item.Country);
    Console.WriteLine(item.AnsSys);
    //and so on..
}