gpt4 book ai didi

c# - 使用泛型的接口(interface) "Cannot implicitly convert type"

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:43 25 4
gpt4 key购买 nike

如果我有一个接受从 IUser 派生的泛型类型的类,我该如何避免此错误消息

Cannot implicitly convert type ElimCMS.Service.Users.someclass<ElimCMS.DataModel.Users.User> to ElimCMS.Service.Users.Isomeclass<ElimCMS.DataModel.Users.IUser>. An explicit conversion exists (are you missing a cast?)

例子

   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>();

最佳答案

发生这种情况是因为具有不同类型的泛型彼此不兼容。为了解决这个问题,您可以使用

Isomeclass 的泛型参数声明为协变的
public interface Isomeclass<out TUser>
where TUser : class, IUser
{

string test(TUser user);
TUser returnUser();
}

但是,这将破坏 test 方法,因为它不再是类型安全的。要解决此问题,您可以将参数 user 类型更改为 IUser,它将像以前一样工作。

这取决于您使用的 C# 版本。对于一些旧版本,泛型不能声明为协变的,这意味着您必须将分配目标更改为与分配给它的对象相同的类型。

关于c# - 使用泛型的接口(interface) "Cannot implicitly convert type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com