C# の構造体は値型

C#のクラスは参照型であるのに対し、C#の構造体は値型です。
ということは、以下のようなことが起こります。

public struct Thing
{
  public String name;
  public Thing(String n)
  {
    name = n;
  }
  public override String ToString()
  {
    return "name=" + name;
  }
}

public class Test
{
  public DoSomthing( Thing t )
  {
    t.name = "New Name";
    Console.WriteLine( "名前は、" + t );
  }

  static void Main()
  {
    Thing t = new Thing( "Old Name" );
    Console.WriteLine( "名前は、", t );
    
    Test o = new Test();
    o.DoSomething( t );

    Console.WriteLine( "名前は、", t ); //!<本当なら、New Name になって欲しいが
  }
}

メソッドに構造体が引数として渡される際は、値そのものが渡されるため、インスタンス t の値は変わらず、出力は、以下のようになります。

名前は、Old Name
名前は、New Name
名前は、Old Name