鉴于以下接口,我不明白为什么ITransactionConsumer
上定义的第二种方法不能编译。编译器抱怨说它不能转换为ITransaction<IUser>
- 但是有一个通用的约束,即TUser
是和IUser
..?C#泛型 - 泛型接口转换错误
public interface ITransactionConsumer
{
//fine
PaymentSession<TTransaction> ConsumeTransaction<TTransaction>(TTransaction transaction)
where TTransaction : ITransaction<IUser>;
//compile error - TTransaction is not convertable to ITransaction<IUser>
PaymentSession<TTransaction> ConsumeTransactionWithTUser<TTransaction, TUser>(TTransaction transaction)
where TTransaction : ITransaction<TUser> where TUser : IUser;
}
public class PaymentSession<TTransaction>
where TTransaction : ITransaction<IUser>
{
}
public interface ITransaction<out TUser>
where TUser : IUser
{
TUser User { get; }
string Id { get; }
}
public interface IUser
{
string Name { get; }
}
看起来你需要为'TUser'添加一个类约束,即'where TUser class,IUser'。 – Lee
我得到一个不同的编译错误:严重\t代码\t说明\t项目\t文件\t线\t抑制状态 错误\t CS0314 \t类型“通讯交易”不能在泛型类型或方法“PaymentSession <被用作类型参数“通讯交易”通讯交易>”。没有从'TTransaction'到'ITransaction'的装箱转换或类型参数转换。 –