Dynamic code generation in C#