我有一个由几个不同对象实现的接口。我要做的是在c#中编写一个接受接口对象作为参数的方法,并将此参数转换为它实现的对象,这样我就不必为几种不同的类型编写相同的函数。如:
Class UnappliedCashDetails实现接口ITransactionDetail。
ISSBatch的构造函数:
public ISSBatch(List<ITransactionDetail>
details)
public static ISSBatch GetNextReceiptBatch()
{
List<UnappliedCashDetail>
details = new List<UnappliedCashDetail>
();
/`*`some code here to populate my list`*`/
return = new ISSBatch(details);
}
C#不喜欢这个。我试图使用界面错误或只是没有正确投射?
谢谢!
答案 0 :(得分:2)
您正在将List<UnappliedCashDetail>
传递给接受List<ITransactionDetail>
的构造函数。 UnappliedCashDetail
可以很好地实现ITransactionDetail
,但C#不支持这种类型的差异。考虑在构造函数(或任何其他方法)中,您可以尝试将SomeOtherTransactionDetail
的实例添加到您的详细信息列表中,除了详细信息列表确实只接受UnappliedCashDetail
,根据其声明。
要使代码正常工作,您需要更改声明
List<ITransactionDetail> details = new List<ITransactionDetail>();
/* some code here to populate my list */
return new ISSBatch(details);
或者您可以简单地将构造函数更改为接受IEnumerable<ITransactionDetail>
,在这种情况下,您的原始List<UnappliedCashDetail>
声明将起作用。 IEnumerable<T>
支持差异(注意:C#4),因为它只是一个序列,无法添加,删除等等,因此不可能尝试添加AppliedCashDetail
实例一系列UnappliedCashDetail
个对象。