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.