En modifiant légèrement la fonction, vous pouvez obtenir l'effet souhaité.
public SharpQuery Each(Action<MyObject, int, HtmlNode> function)
{
for (int i = 0; i < _context.Count; ++i)
function(this, i, _context[i]);
return this;
}
Vous pourriez alors écrire votre appel de fonction comme suit :
sharpQuery.Each((self, i, node) => /* do something with `self` which is "this" */);
Note : La fonction anonyme n'aura cependant accès qu'aux membres publics. Si la fonction anonyme a été définie dans la classe, elle aura accès aux membres protégés et privés comme d'habitude.
par exemple,
class MyObject
{
public MyObject(int i)
{
this.Number = i;
}
public int Number { get; private set; }
private int NumberPlus { get { return Number + 1; } }
public void DoAction(Action<MyObject> action)
{
action(this);
}
public void PrintNumberPlus()
{
DoAction(self => Console.WriteLine(self.NumberPlus)); // has access to private `NumberPlus`
}
}
MyObject obj = new MyObject(20);
obj.DoAction(self => Console.WriteLine(self.Number)); // ok
obj.PrintNumberPlus(); // ok
obj.DoAction(self => Console.WriteLine(self.NumberPlus)); // error