Execute selection in C# program.
This is something that I think sometimes would be useful, but I don't know how feasible it is, as I see some problems with the idea.
If I make a text selection in the main method of "C# program" query and click "Execute", sometimes would be useful if the additional methods and classes outside the main method were available so that it doesn't fail to compile because the classes weren't part of the selected text.
All it would need to do is to make the text selection the new main method, but keep everything the same.
This could work even if the text selection was someplace else than the main method. The selected text could still be the main method.
However, there are some concerns which I am not sure what to do with:
* What if the rest of the query doesn't compile?
* What if static initializers or something caused a runtime error to happen (which had nothing to do with the selected text).
The same may be true for the "Clone query" operation with selected text.
If I make a text selection in the main method of "C# program" query and click "Execute", sometimes would be useful if the additional methods and classes outside the main method were available so that it doesn't fail to compile because the classes weren't part of the selected text.
All it would need to do is to make the text selection the new main method, but keep everything the same.
This could work even if the text selection was someplace else than the main method. The selected text could still be the main method.
However, there are some concerns which I am not sure what to do with:
* What if the rest of the query doesn't compile?
* What if static initializers or something caused a runtime error to happen (which had nothing to do with the selected text).
The same may be true for the "Clone query" operation with selected text.
Comments
What are your thoughts on that?
They have debugged once or twice inside visual studio express. They will be very glad to hear this. Debugging is right at the top of the wishlist (along with Git integration).
Is there a technical reason why it only would work inside the main method and not any static method? Couldn't you still just set the execution pointer. It wouldn't make that much difference, but I am asking to learn. "Setting the execution pointer" is pretty far away from my strong suits.
The practical difference from my suggestion is the ability to execute selection in any other place than the main method.
My suggestion was that the text selection would become the whole main method in the compiled artifact. I still see some benefits from that, especially as the methods and classes increase in size and the original main method is basically just initializing and calling into stuff.
This would most of the time work for instance methods as long as they don't access instance members. But if they do, there is some external execution context at work and the user should probably be looking to the debugger anyway (assuming it is coming).
Expanding on my suggestion after having slept on it: To preserve LINQPads minimalistic style I think it would be best if LINQPad first tried to compile text selection it as "C# statements" and only proceeded to compile using this approach if compiling as "C# statements" failed. This so that initializers will not affect runtime or performance in cases where they are not needed to execute the selection. I think it makes the most intuitive sense to the user.
These are my initial thoughts. I appreciate being asked and hope that I can contribute more when I have contemplated it some more.