Каков наилучший способ конвертировать IEnumerator в универсальный IEnumerator?

Это ошибка пути сборки.

  • Убедитесь, что папка вашего bin не включена в ваш путь сборки.
  • Щелкните правой кнопкой мыши свой проект -> перейти к свойствам -> Путь сборки.
  • Убедитесь, что библиотека Honeycomb находится в папке libs/, а не в исходной папке.
  • Включите библиотеки в libs/ отдельно в пути сборки. BTW, вы можете принести библиотеку android-support-v4, чтобы получить поддержку Sandwich Ice Cream вместо библиотеки поддержки Honeycomb.
30
задан zonkflut 6 May 2009 в 07:02
поделиться

3 ответа

Я не верю, что во фреймворке есть что-то, но вы могли бы легко написать его:

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 .GetEnumerator (); , когда foo определенно является другим объектом (который не передает обратно этому one), но в противном случае вам, вероятно, лучше всего будет использовать приведенный выше код.

52
ответ дан 27 November 2019 в 22:15
поделиться

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();
0
ответ дан 27 November 2019 в 22:15
поделиться

IEnumerable уже является производным от IEnumerable , поэтому нет необходимости выполнять какое-либо преобразование , Вы можете просто привести к нему ... ну, на самом деле это неявное приведение, не требуется.

IEnumerable<T> enumerable = GetGenericFromSomewhere();
IEnumerable sadOldEnumerable = enumerable;
return sadOldEnumerable.GetEnumerator();

С LINQ сделать наоборот не намного сложнее:

var fancyEnumerable = list.OfType<GenericObject>();
return fancyEnumerable.GetEnumerator();
3
ответ дан 27 November 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: