从接口转换为实现接口的对象?

时间:2010-12-20 16:26:32

标签: c#

我有一个由几个不同对象实现的接口。我要做的是在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#不喜欢这个。我试图使用界面错误或只是没有正确投射?

谢谢!

1 个答案:

答案 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个对象。

相关问题