我在我的应用程序中使用silverlight 4.0。我在我的基类中有一个方法,如下所述
class BaseClass
{
protected CustomRequest GetCustomRequest(IEnumerable<IRequestType> types)
{
//Some code here...
}
}
在我的派生类中,当我调用此方法时,我得到错误
IEnumerable<RequestType> requestTypes = CodeToGetThis();
GetCustomRequest(requestTypes)
请注意,在调用语句中,requestTypes的类型是派生类型的IRequestType 的可枚举。
由于在c#4.0中引入协方差,这在桌面应用程序中运行良好。但似乎对于Silverlight 4.0来说,IEnumerable接口并没有这样做。
那么我应该在Silverlight应用程序中使用的最佳替代方法是什么?
我在某处读到可以使用方法重载完成,但不知道如何执行此操作。
更新 我在问题的第一稿中遗漏的一件事是,我将有许多派生类型的IRequestType,因此每个派生类型的重载方法都会给我带来困难。
答案 0 :(得分:1)
只需将每个项目投射到界面,例如
IEnumerable<IRequestType> requestTypes = CodeToGetThis().Select(x => (IRequestType)x);
GetCustomRequest(requestTypes)
你可以使用方法重载做一些事情,并且有一个方法可以获取你的派生/具体类型,但你最终会做类似上面的事情,并在重载中调用原始方法。