Avec un léger changement dans la fonction, vous pouvez obtenir l'effet désiré.
public SharpQuery Each(Action<MyObject, int, HtmlNode> function)
{
for (int i = 0; i < _context.Count; ++i)
function(this, i, _context[i]);
return this;
}
Ensuite, vous pouvez écrire votre appel de fonction comme ceci:
sharpQuery.Each((self, i, node) => /* do something with `self` which is "this" */);
Note: La fonction anonyme n'aura accès aux membres du public cependant. 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
Voulant un peu de JavaScript pour faire son chemin dans C#? :) – ChaosPandion
@Chaos: Je peux vivre sans ... mais j'essaie d'imiter une certaine bibliothèque JS aussi étroitement que possible. – mpen