In the C# squeaky clean exercise, one requirement seems to be incomplete/misleading.
There is a requirement to replace spaces with underscores, then a further requirement to remove any non-letter characters. The latter removes any underscores that may have been produced earlier.
Switching the order of these steps doesn’t help, so there is something more that’s not said in the requirements, I think.
I believe the requirements should be changed to indicate that an underscore should be preserved and not discarded in the step that removes non-letters. When I change my code to do that, all tests pass.
Now that I see how most people have solved this exercise, I understand how this has not come up before as an issue. My approach was different, and I won’t explain it so I don’t give away a potential solution.
The sentence “In this exercise, you will implement a partial set of utility routines to help a developer clean up identifier names” led me to my solution, which as I said, was not similar to most that I’m seeing in the Community solutions.
A valid identifier comprises zero or more letters and underscores. indicates that both letters and underscores are protected characters so they should be preserved.
There is some tension as you noted between Task 1 where we introduce underscores to replace spaces and Task 4 where we remove non-letters. Exercism encourages test-driven development, and often a new requirement may break the code for a previous requirement so you need to reconcile that to work through the tests.
I see that understanding the requirements will be necessary but not sufficient to pass the tests. I can propose changes to the requirements to bring them more in line with the tests if you’d wish. Otherwise, I’m on to the next exercise.