неявное преобразование из универсального типа интерфейса [дубликат]
На этот вопрос уже есть ответ здесь:
У меня есть следующий неявный оператор преобразования:
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 ответ:
Определяемые пользователем преобразования задаются как Не работающие на интерфейсах. Если бы они действительно работали с интерфейсами, подобными этому, то вы могли бы оказаться в ситуации, когда
Bar<IFoo>
преобразуется вIFoo
через изменение представления определяемого пользователем преобразования , когда объект фактически реализуетIFoo
, что было бы удивительно.