m C #, por que não posso modificar o membro de uma instância de tipo de valor em um loop foreac

Eu sei que os tipos de valor devem ser imutáveis, mas isso é apenas uma sugestão, não uma regra, certo? Então, por que não posso fazer algo assim:

struct MyStruct
{
    public string Name { get; set; }
}

 public class Program
{
    static void Main(string[] args)
    {
        MyStruct[] array = new MyStruct[] { new MyStruct { Name = "1" }, new MyStruct { Name = "2" } };
        foreach (var item in array)
        {
            item.Name = "3";
        }
        //for (int i = 0; i < array.Length; i++)
        //{
        //    array[i].Name = "3";
        //}

        Console.ReadLine();
    }
}

O loop foreach no código não compila enquanto o loop comentado funciona bem. A mensagem de erro:

Não é possível modificar membros de 'item' porque é uma 'variável de iteração foreach'

Por que é que

questionAnswers(7)

yourAnswerToTheQuestion