EDIT:
Кажется, подтверждается, что ковариантные дженерики еще не поддерживаются. Чтобы сделать это в следующем выпуске, напишите Xamarin и запросите эту функцию.
Следующий код выдает ошибку (в операторе linq). Идентичный код отлично работает в Microsoft clr c # 4.0.
Ошибка:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<LinqTest.Person>' to 'System.Collections.Generic.IEnumerable<LinqTest.Entity>'. An explicit conversion exists (are you missing a cast?)
Код:
[Activity(Label = "LinqTest", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity {
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
var names = new List<string> {
"Joe",
"Bob",
"Jim",
"Jane"
};
IEnumerable<Entity> query =
from e in names
select new Person() {Name = e};
SetContentView(Resource.Layout.Main);
var button = FindViewById<Button>(Resource.Id.MyButton);
button.Click += delegate {
button.Text = string.Format("{0}", query.Count());
};
}
}
public class Entity {
public string Name { get; set; }
}
public class Person : Entity {
public string Workplace { get; set; }
}
public class Animal : Entity {
public string FurColour { get; set; }
}
Я прав или я что-то упустил? Если да, то рекомендации по рефакторингу это?
Также, если это так, считайте это официальным запросом функции для monodroid - поддержка ковариантной универсальной поддержки. :)
Спасибо.