delegate void SpanHandler(Span<int> span);
class A {
public int id;
public event SpanHandler e;
public void Set()
{
Span<int> span = stackalloc int[1]{id};
e.Invoke(span);
}
public A CreateChild(int id)
{
var child = new A(){id = id};
child.e += (span) => {
Span<int> span2 = stackalloc int[span.Length +1];
span.CopyTo(span2);
span2[^1] = this.id;
e.Invoke(span2);
};
return child;
}
}
var a = new A() { id = 1 };
var b = a.CreateChild( 2);
var c = b.CreateChild( 3);
var d = c.CreateChild( 4);
a.e += (span) => {
Console.WriteLine(string.Join(",", span.ToArray()));
};
b.Set();
c.Set();
d.Set();
----------
output:
2,1
3,2,1
4,3,2,1