代码之家  ›  专栏  ›  技术社区  ›  Atriace

使用For循环检索索引处的键

  •  0
  • Atriace  · 技术社区  · 6 年前

    C# is simply lacking 一个我期待的特性。

    for 编程中的循环。

    #1 for (iterator; limit; increment) {}

    iterator

    #2 for (key in object) {}

    分配 key 价值 左半部分 key:value 在对象的每个入口配对。

    #3 foreach (value in object) {}

    分配 value 右半部分 在对象的每个入口配对。

    foreach 可以使用 KeyValuePair<TKey,TValue> 钥匙 价值

    #2 for in 对于C#?

    2 回复  |  直到 6 年前
        1
  •  1
  •   MikeH    6 年前

    你可以做一个 foreach (var key in object.keys) Dictionary ) :

      Dictionary<object, object> dict = new Dictionary<object, object>();
      foreach (var key in dict.Keys)
      {
        var value = dict[key]; //Not required
      }
    

    您还可以遍历 Values Keys …但当然,检索相应的密钥是不可能的。

        2
  •  0
  •   Derviş Kayımbaşıoğlu    6 年前

    向@MikeH致敬,

    如果您的意图是迭代纯对象,以获得变量名作为键,其值作为值,那么您可以使用反射来实现这一点。下面是一个例子

    public class Test
    {
        public string Prop1 {get; set;}
        public string Prop2 {get; set;}
        public string Prop3 {get; set;}
        public string Prop4 {get; set;}
    }
    
    public class Program
    {
        public static void Main()
        {
                var test = new Test(){
                    Prop1 = "Test1",
                    Prop2 = "Test2",
                    Prop3 = "Test3",
                    Prop4 = "Test4"
                };
    
                foreach (var property in test.GetType().GetProperties())
                {
                    Console.WriteLine("{0} = {1}", property.Name, property.GetValue(test));
                }
        }
    }
    

    此外,如果你想再使用字典,你可以使用

    var dict = test.GetType().GetProperties().ToDictionary(x => x.Name, x=> x.GetValue(test));
    foreach (var key in dict.Keys)
        Console.WriteLine("{0} = {1}", key, dict[key]);