InvalidCastException,尽管定义了显式强制转换操作符
本文关键字:转换 操作符 定义 InvalidCastException | 更新日期: 2023-09-27 18:06:31
这很奇怪。我的显式强制转换操作符不起作用。
我有一个强制转换操作符定义如下:
public class OAuthClient
{
public string LoginUrl { get; set; }
public string ImagePath { get; set; }
public string ImageTitle { get; set; }
public string ImageAlt { get; set; }
public static OAuthClient FromFrameworkOAuthClient(
BaseServices.OAuth.IOAuthClient client)
{
return new OAuthClient
{
LoginUrl = client.LoginUrl,
ImagePath = client.ImagePath,
ImageTitle = client.ImageTitle,
ImageAlt = client.ImageAlt
};
}
public static OAuthClient FromGoogleClient(GoogleClient client)
{
return FromFrameworkOAuthClient(client);
}
public static OAuthClient FromFacebookClient(FacebookClient client)
{
return FromFrameworkOAuthClient(client);
}
public static explicit operator OAuthClient(BaseServices.OAuth.FacebookClient client)
{
return FromFrameworkOAuthClient(client);
}
public static explicit operator OAuthClient(BaseServices.OAuth.GoogleClient client)
{
return FromFrameworkOAuthClient(client);
}
}
}
在Controller
方法中,我这样做:
protected virtual IEnumerable<ViewModels.OAuthClient> GetViewModelOAuthClients(
IEnumerable<IOAuthClient> oAuthClients)
{
oAuthClients.ForEach(client => { client.GetLoginUrl(); });
return oAuthClients.Select(c => (ViewModels.OAuthClient)c);
}
奇怪的是,我得到一个InvalidCastException
说,无法转换类型为'BaseServices.OAuth的对象。FacebookClient'输入'Web.Presentation.ViewModels.OAuthClient'..
我创建了另一个特定的显式转换,从BaseServices.OAuthClient
到ViewModels.OAuthClient
,如下所示:
public static explicit operator OAuthClient(BaseServices.OAuth.OAuthClient client)
{
return FromFrameworkOAuthClient(client);
}
然后将IEnumerable<IOAuthClient>
中的每个项目先转换为BaseServices.OAuthClient
,然后再转换为ViewModels.OAuthClient
。
protected virtual IEnumerable<ViewModels.OAuthClient> GetViewModelOAuthClients(
IEnumerable<IOAuthClient> oAuthClients)
{
oAuthClients.ForEach(client => { client.GetLoginUrl(); });
return oAuthClients.Select(c => (ViewModels.OAuthClient)(OAuthClient)c);
}
。