That's because of way how CLR passes the params to method.
Put simply:
string sample = "Initial value";
Here sample variable refers to "Initial value" string instance stored in heap.
public static void Test(string testString)
{
testString = "Modified Value";
}
In the method you modify testString variable(copy of sample variable) making it references to "Modified Value" string in a heap, leaving original sample variable no affected.