¿Por qué System.Array no puede ser una restricción de tipo?

Estoy trabajando en un proyecto pequeño con algunos tipos diferentes de arreglos (por ejemplo,double[], float[], int[]. Para fines de verificación / prueba / cordura, estoy imprimiendo algunos de estos arreglos en la consola a medida que avanzo. Así que tengo varias funciones que se parecen a estas a continuación (simplificadas para este ejemplo, asumiendo que solo estoy tratando con matrices de una sola dimensión):

void Print(float[] a) // prints an array of floats
{
    for (int i = 0; i < a.Length; i++)
    {
        Console.Write(a[i]);
    }
}

void Print(double[] a) // prints an array of doubles
{
    for (int i = 0; i < a.Length; i++)
    {
        Console.Write(a[i]);
    }
}

Yo, en mi infinita sabiduría, pensé que podría reducir algo de la duplicación de código simplemente creando una versión genérica de estas funciones. Así que intenté esto:

void Print<T>(T t) where T : Array
{
    for (int i = 0; i < t.Length; i++)
    {
        Console.Write(t.GetValue(i));
    }
}

Intellisense no se queja, pero el compilador falla con un error muy interesante:

Constraint cannot be special class 'System.Array'

He buscado una explicación (similar aObject O clases selladas, pero no han encontrado mucho, además de una mención.en msdn. Alguien me puede explicarpor qué ¿este es el caso? ¿Por qué no puedo especificar una restricción de tipo deSystem.Array?

p.s .: Mientras escribía esto, me di cuenta de que puedo lograr lo que originalmente quería con más facilidad, con una función simple como esta:

void Print(System.Array a)
{
    for (int i = 0; i < a.Length; i++)
    {
        Console.Write(a.GetValue(i));
    }
}

¿Es por esto que hay una regla especial para los arreglos en el compilador?

Respuestas a la pregunta(2)

Su respuesta a la pregunta