I am phrasing my example in generic terms because it gets the point across without having to go into my specific problem details.
Suppose you had a bunch of methods that take strings as parameters. Suppose that one string were a person's "first name" and another were a person's "last name". There could be other strings like "favorite food".
Now, in your code, you keep finding runtime bugs because you are getting the parameters mixed up. You may switch the order of "first name" and "last name" or use one when you should have used the other. The value of strongly-typed languages is that it will find these bugs at build time rather than runtime.
So, one possible solution would be to just derive classes from string.
public class FirstName : String
{
}
public class LastName : String
{
}
Now, if you passed the wrong type of string the compiler would complain. The above is not possible because String is sealed. Also, the "using" statement will not work (I think) because the compiler will not complain when I mix them up.
using LastName = String;
Sure, I could build classes that wrap the string and then write cast conversion methods, but that seems like more trouble than it is worth.