在 C# 中循环访问集合

本文关键字:访问 集合 循环 | 更新日期: 2023-09-27 17:55:26

我创建了以下类:

[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;
    }
}

如何遍历选项以获取所有变量号?

在 C# 中循环访问集合

方法 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);
}

一个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);

>OPTIONS是一个不实现任何集合接口的类(比如IEnumerable)。您无法迭代它。

您可以遍历字典 - dict_Options

foreach(var item in dict_Options)
{
  // use item - say item.varNumber
}

注意:

在你的类中有公共字段是糟糕的设计 - 它违反了封装和信息隐藏,并且会使类难以发展。您应该使用私有字段和公共属性来公开它们。

如果你只想遍历所有的varNumbers,我可能会执行以下操作:

        var dict_Options = new Dictionary<string, OPTIONS>();
        foreach (var varNumber in dict_Options.Select(kvp => kvp.Value.varNumber))
        {
            // Your code.
        }