Iterators in C#
In JavaScript, there's a bit of magic in arrays and objects. They have methods themselves like myArray.toString(), and they also have a special way of accessing entries through iterator selectors myArray[2].
C# actually exposes this method of class design through iterators!
To get that functionality, we need a method on the class that uses the this keyword:
 public string this[string key]
{
    get
    {
        return _dict[key];
    }
    set
    {
        _dict[key] = value;
    }
}Above, we'll assume _dict is of type Dictionary, a built in Class that functions just like a Python dictionary or JavaScript object.
I've typed the above iterator value with a string, but you could set is as an int and use a List just as well.
Here's what it looks like if we were to reproduce some of the functionality of a JavaScript object:
using System;
using System.Collections.Generic;
namespace HelloWorld7
public class Object
{
    private Dictionary<string, string> _dict = new Dictionary<string, string>();
    public Dictionary<string, string>.KeyCollection Keys()
    {
        return _dict.Keys;
    }
    public string this[string key]
    {
        get
        {
            return _dict[key];
        }
        set
        {
            _dict[key] = value;
        }
    }
}An exception: we can't really expose keys as a static method like we would in JavaScript here. If Keys() is made static, we would also have to make the internal _dict public, which defeats the purpose of encapsulating it.
Once that's set, you can create an object instance and return keys like so:
class Program
{
    static void Main(string[] args)
    {
        var myObj = new Object();
        myObj["name"] = "Chris";
        myObj["city"] = "Dallas";
        myObj["pets"] = "Lucy";
        Dictionary<string, string>.KeyCollection keyColl = myObj.Keys();
        foreach (string key in keyColl)
        {
            Console.WriteLine(key);
        }
        // name
        // city
        // pets
    }
}