3

我有以下隐式转换运算符:

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 的原因可能是什么?

4

1 回答 1

3

用户定义的转换被指定为不适用于接口。如果他们确实在这样的接口上工作,那么您最终可能会遇到当对象实际实现时通过更改表示的用户定义转换转换Bar<IFoo>为的情况,这将是令人惊讶的。IFoo IFoo

于 2013-07-29T18:12:38.950 回答