C# не Может преобразовать из IEnumerable <Основа> к <Полученному> IEnumerable

Есть несколько опций, которые вы должны попробовать:

  1. Если вы открыли Skype, вы должны закрыть и выйти из него. Из-за этого получается port 80. (Поэтому убедитесь, что Skype не работает в фоновом режиме)
  2. И если там установлено SQL Server, вам нужно остановить эти службы в службах Windows.
  3. Если есть MySQL Workbench, вы должны сделать то же самое.
  4. Отключить антивирусную программу.
  5. Щелкните правой кнопкой мыши по XAMPP control panel и запустите от имени администратора.
5
задан mafu 11 March 2009 в 12:15
поделиться

4 ответа

Это - ковариантность и будет зафиксировано в C# 4.0/.NET 4.0. На данный момент универсальная опция является лучшим ответом (для IEnumerable<T> - нет IList<T> и т.д.).

Но в общем методе, необходимо думать с точки зрения T. Вы могли также использовать Cast<T> или OfType<T> с LINQ для достижения чего-то подобного.

18
ответ дан 18 December 2019 в 07:56
поделиться

В C# 3.0 можно использовать метод расширения "Броска". Если Вы импортируете Систему. Linq и затем используют этот код:

public void AddRange2<T>(IEnumerable<T> foos) where T : Foo
{
    m_Foos.AddRange (foos.Cast<Foo>());
}

Затем это должно работать на Вас.

2
ответ дан 18 December 2019 в 07:56
поделиться

Существует обходное решение с дополнительным методом:

public static IEnumerable<TBase> ToBaseEnumerable<TBase, TDerived>( this IEnumerable<TDerived> items ) where TDerived : TBase {
    foreach( var item in items ) {
        yield return item;
    }
}
...
IEnumerable<Employee> employees = GetEmployees(); //Emplyoee derives from Person
DoSomethingWithPersons( employees.ToBaseEnumerable<Person, Employee>() );

но" <Человек, Сотрудник>" является немного неловким:/.

0
ответ дан 18 December 2019 в 07:56
поделиться

Решение приведения, конечно, могло генерировать исключения приведения классов . Человек, который опубликовал работу с перечисляемыми расширениями, сказал, что это было неудобно. Я придумал решение, которое вдвое менее неудобно, не знаю, буду ли я его использовать:

public static class UpTo<T>
{
    public static IEnumerable<T> From<F>(IEnumerable<F> source) where F:T
    {
        // this cast is guaranteed to work
        return source.Select(f => (T) f);
    }
}

Использование:

IEnumerable mammals = UpTo .From (kennel.Dogs)

0
ответ дан 18 December 2019 в 07:56
поделиться
Другие вопросы по тегам:

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