Я удивлен, что никто не указал на хороший сайт: http://detectmobilebrowsers.com/ Он имеет готовый код на разных языках для мобильного обнаружения (включая, но не ограничиваясь):
И если вам нужно также обнаружить планшеты, просто проверьте раздел About для дополнительного параметра RegEx.
Планшеты Android, планшеты iPad, Kindle Fires и PlayBook не определяются дизайном. Чтобы добавить поддержку для планшетов, добавьте
|android|ipad|playbook|silk
к первому регулярному выражению.
Если два типа различны, вы должны использовать один и тот же Select для сопоставления с новым списком.
list2 = list1.Select( x => new MyData2()
{
//do your variable mapping here
PropertyB = x.PropertyB,
PropertyC = x.PropertyC
} ).ToList();
ИЗМЕНИТЬ ДОБАВИТЬ :
Теперь, когда вы изменили свой вопрос. Вы можете сделать что-нибудь подобное, чтобы исправить то, что вы пытаетесь сделать.
list2 = list1.Aggregate(new List<MyData2>(),
(x, y) =>
{
if (y.PropertyList == null)
x.Add(new MyData2(null, y.PropertyB, y.PropertyC));
else
x.AddRange(y.PropertyList.Select(z => new MyData2(z, y.PropertyB, y.PropertyC)));
return x;
}
);
list2 = list1.ConvertAll<MyData>( a => a.MyConversion() )