An array is a reference type. The list contains the same references as array s. So the both elements of the list are the same references as s. As the last value of s is { "3", "4" } then you get the result as is.
Try the following code
using System;
using System.Collections.Generic;
namespace ListOfArrays
{
class Program
{
static void Main(string[] args)
{
List<string[]> list = new List<string[]>();
list.Add( new string[] { "1", "2" } );
list.Add( new string[] { "3", "4" } );
foreach (string[] match in list)
{
Console.WriteLine(match[0] + match[1]);
}
}
}
}
The output is
12
34
Take into account that it is better to use type name string instead of String The last is dependent of using directive.