Это ошибка пути сборки.
libs/
, а не в исходной папке. libs/
отдельно в пути сборки. BTW, вы можете принести библиотеку android-support-v4
, чтобы получить поддержку Sandwich Ice Cream вместо библиотеки поддержки Honeycomb. Я не верю, что во фреймворке есть что-то, но вы могли бы легко написать его:
IEnumerator<T> Cast<T>(IEnumerator iterator)
{
while (iterator.MoveNext())
{
yield return (T) iterator.Current;
}
}
Заманчиво просто вызвать Enumerable.Cast
из LINQ а затем вызовите GetEnumerator ()
для результата - но если ваш класс уже реализует IEnumerable
и T
является типом значения, который действует как нет -op, поэтому вызов GetEnumerator ()
выполняет рекурсию и вызывает исключение StackOverflowException
. Безопасно использовать return foo.Cast
, когда foo
определенно является другим объектом (который не передает обратно этому one), но в противном случае вам, вероятно, лучше всего будет использовать приведенный выше код.
You can use OfType
and Cast
.
public static IEnumerable Digits()
{
return new[]{1, 15, 68, 1235, 12390, 1239};
}
var enumerable = Digits().OfType<int>();
foreach (var item in enumerable)
// var is here an int. Without the OfType<int(), it would be an object
Console.WriteLine(i);
To get an IEnumerator
instead of an IEnumerable
you can just make a call to GetEnumerator()
var enumerator = Digits().OfType<int>().GetEnumerator();
IEnumerable
уже является производным от IEnumerable
, поэтому нет необходимости выполнять какое-либо преобразование , Вы можете просто привести к нему ... ну, на самом деле это неявное приведение, не требуется.
IEnumerable<T> enumerable = GetGenericFromSomewhere();
IEnumerable sadOldEnumerable = enumerable;
return sadOldEnumerable.GetEnumerator();
С LINQ сделать наоборот не намного сложнее:
var fancyEnumerable = list.OfType<GenericObject>();
return fancyEnumerable.GetEnumerator();