替代银色的协方差4.0 IEnumerable <t> </t>

时间:2011-12-20 12:54:05

标签: c# .net silverlight-4.0 ienumerable covariance

我在我的应用程序中使用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,因此每个派生类型的重载方法都会给我带来困难。

1 个答案:

答案 0 :(得分:1)

只需将每个项目投射到界面,例如

IEnumerable<IRequestType> requestTypes = CodeToGetThis().Select(x => (IRequestType)x);
GetCustomRequest(requestTypes)

你可以使用方法重载做一些事情,并且有一个方法可以获取你的派生/具体类型,但你最终会做类似上面的事情,并在重载中调用原始方法。