C # Неявное приведение к списку <T>возвращает ошибку времени выполнения - PullRequest
1 голос
/ 27 октября 2010

У меня есть класс, подобный следующему, который использует внутренний список:

public class MyList<T> : IEnumerable<T>
{
        private List<T> _lstInternal;
        public MyList()
        {
            _lstInternal = new List<T>();
        }
        public static implicit operator List<T>(MyList<T> toCast)
        {
            return toCast._lstInternal;
        }

}

Когда я пытаюсь передать MyList<object> в функцию, которая принимает List<object>, я получаю InvalidCastException.Почему?

1 Ответ

1 голос
/ 27 октября 2010

Используя описанный вами класс, у меня сработал следующий код:

static void Main(string[] args)
{
   MyList<object> foo = new MyList<object>();

   MyMethod(foo);
}

static void MyMethod(List<object> things)
{
   // No InvalidCastException when called...
}

Единственное, что я изменил из класса MyList<T>, который вы опубликовали в своем вопросе, - это добавление следующей реализации IEnumerable<T>:

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

Не совсем уверен, почему вы получаете исключение, за исключением того, что я упомянул в своем комментарии, я использую C # версию 4.0. Какую версию вы используете?

...