С помощью отражения вы можете получить все значения:
var anonymousData = new
{
Z = "2",
B = "4",
C = "3",
D = 5
};
Type t = anonymousData.GetType();
Property[] p = t.GetProperties();
List<object> xy = p.Select(x => x.GetValue(anonymousData)).ToList();
Вы добавили, что хотите сохранить порядок своих свойств в списке результатов.Это невозможно - подумайте об объекте типа Car:
new MyCar { Id = 3, Color= "red"};
, который не отличается от автомобиля, подобного
new MyCar { Color= "red", Id = 3};
, когда свойства переключаются.Имхо, аномальный тип ничем не отличается.Поэтому при экспорте в CSV сортировка ваших свойств не должна иметь никакого значения - в этом случае вам, возможно, следует взглянуть на Dictionary
в противном случае.