这很奇怪。我的显式强制转换运算符不起作用。
我有一个像这样定义的转换运算符:
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);
}
这有效。
关于c# - 即使定义了显式转换运算符,也会出现 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033931/