В следующих строках:
MyAttribute [] myAttributes
= (MyAttribute [])a.GetType().GetCustomAttributes(typeof(MyAttribute),true);
Не могу понять, что вы подразумеваете под «без использования foreach», за исключением того, что GetCustomAttributes всегда возвращает их массив (чтобы учесть наличие нескольких атрибутов).Если вы знаете, что может быть только один, просто используйте первый.
MyAttribute theAttrib = myAttributes[0];
Console.WriteLine(theAttrib.CustomAttribute);