неявное преобразование из универсального типа интерфейса [дубликат]


На этот вопрос уже есть ответ здесь:

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

public static implicit operator InputArgument<T>(T value)
{
   return new InputArgument<T>(value);
}

Ниже приведен код в ASP.NET контроллер MVC:

Это работает:

InputArgument<string> input = "Something";

Это работает:

InputArgument<Controller> input = this;

Это работает:

InputArgument<IPrincipal> input = new InputArgument<IPrincipal>(User);

Но это не так. работа:

InputArgument<IPrincipal> input = User;

Последний пример дает ошибку:

> Cannot implicitly convert type
> 'System.Security.Principal.IPrincipal' to
> 'Engine.InputArgument<System.Security.Principal.IPrincipal>'. An
> explicit conversion exists (are you missing a cast?)
Что может быть причиной того, что это неявное преобразование не работает для IPrincipal?
1 3

1 ответ:

Определяемые пользователем преобразования задаются как Не работающие на интерфейсах. Если бы они действительно работали с интерфейсами, подобными этому, то вы могли бы оказаться в ситуации, когда Bar<IFoo> преобразуется в IFoo через изменение представления определяемого пользователем преобразования , когда объект фактически реализует IFoo, что было бы удивительно.