鑑於以下接口,我不明白爲什麼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'的裝箱轉換或類型參數轉換。 –