Невозможно неявно преобразовать тип в ActionResult & lt; T & gt; [Дубликат]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

48
задан MatthewMartin 15 October 2014 в 17:20
поделиться

1 ответ

Причина, по которой вы не можете этого сделать, состоит в том, что она специально запрещена в спецификации языка C #:

Класс или структура разрешено объявлять преобразование из типа источника S в target type T, если все из них верны:

  • ...
  • Ни S, ни T не являются object или интерфейсом .

и

Преобразованиям, заданным пользователем, не разрешено преобразовывать из или в интерфейсные типы , В частности, это ограничение гарантирует, что при преобразовании в интерфейсный тип не будет никаких пользовательских преобразований и что преобразование в интерфейсный тип будет выполнено только в том случае, если объект преобразованный фактически реализует указанный интерфейс interface-type .

Источник

49
ответ дан Adam Hughes 19 August 2018 в 14:21
поделиться
  • 1
    Я понимаю, что это часть спецификации, неявное литье интерфейса должно быть недействительным в некоторых случаях, но во всех? – Michael Meadows 27 September 2008 в 13:59
  • 2
    Я согласен с вами, я не знаю, почему они сделали его недействительным для всех случаев. В этом случае во время компиляции вы можете определить, что бросок (должен быть) действителен. – Adam Hughes 27 September 2008 в 14:41
  • 3
    I верьте , что ограничение на неявное литье интерфейса связано с тем, как реализован COM-взаимодействие. COM использует QueryInterface, который .NET обрабатывает автоматически. Разрешить неявное преобразование интерфейса будет мешать. – Mark 7 October 2010 в 14:48
  • 4
    @MichaelMeadows, вы можете быть просветлены, чтобы прочитать ответы Адама Халдсворта и Эрика Липперта на мой аналогичный вопрос в контексте C # 4.0. – gregsdennis 19 December 2012 в 20:15
  • 5
    Объясняет ли это, почему они приняли это решение в любом месте? – Hatchling 4 February 2017 в 02:58
Другие вопросы по тегам:

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