如果我有一个类接受从IUser派生的泛型类型,我该如何避免此错误消息
无法隐式转换
ElimCMS.Service.Users.someclass<ElimCMS.DataModel.Users.User>为ElimCMS.Service.Users.Isomeclass<ElimCMS.DataModel.Users.IUser>.存在显式转换(您是否错过了演员?)
例
public interface Isomeclass<TUser>
where TUser : class, IUser
{
string test(TUser user);
TUser returnUser();
}
public class someclass<TUser> : Isomeclass<TUser>
where TUser : class, IUser, new()
{
public string test(TUser user)
{
string email = user.EMail;
user.EMail = "changed:" + email;
return email;
}
public TUser returnUser()
{
throw new NotImplementedException();
}
}
Isomeclass<ElimCMS.DataModel.Users.IUser> servicetest = new someclass<ElimCMS.DataModel.Users.User>();
Run Code Online (Sandbox Code Playgroud)
这是因为具有不同类型的泛型彼此不兼容.要解决此问题,您可以Isomeclass使用通用参数声明您的通用参数
public interface Isomeclass<out TUser>
where TUser : class, IUser
{
string test(TUser user);
TUser returnUser();
}
Run Code Online (Sandbox Code Playgroud)
但是,这将破坏该test方法,因为它将不再是类型安全的.要解决此问题,您可以将参数user类型更改为IUser,它将像以前一样工作.
这取决于您使用的C#版本.对于某些旧版本,泛型不能声明为协变,这意味着您必须将赋值目标更改为与分配给它的对象相同的类型.
| 归档时间: |
|
| 查看次数: |
2454 次 |
| 最近记录: |