当在集合<t>方法上使用override时,基类具有ToCollection但派生类没有

时间:2015-04-23 06:55:14

标签: c# asp.net

基类:

public virtual Collection<string> GetPaymentMethods(Organization organization)
        {

 IPaymentService paymentService = ServiceLocator.GetPaymentService();

            Collection<PaymentMethod> paymentMethods = paymentService.GetPaymentMethods(organization.CountryCode, organization.LanguageCode, organization.UserType, AppAvailableType.AutoRenewal);
            return paymentMethods.Select(p => p.PaymentMethodType).ToCollection<string>();
        }

控制装置:

 public override Collection<string> GetPaymentMethods(Organization organization)
        {

            Collection<PaymentMethod> paymentMethods = this.PaymentService.GetPaymentMethods(organization.CountryCode, organization.DisplayLanguageCode, organization.UserType, AppAvailableType.AutoRenewal);
            return paymentMethods.Select(p => p.PaymentMethodType).**ToCollection**<string>();

        }

在上面的方法中,“。TooCollection”与基类不同。获取以下错误:

  

'System.Collections.Generic.IEnumerable'不包含   'ToCollection'的定义,没有扩展方法'ToCollection'   接受第一个类型的参数   可以找到'System.Collections.Generic.IEnumerable'(是   你错过了使用指令或程序集引用?)

2 个答案:

答案 0 :(得分:1)

转到基类,将光标放在ToCollection方法调用上。按F12(转到定义)。 VS会告诉你方法的来源。

  • 如果是扩展方法,则在派生类中导入命名空间。
  • 如果两者都在不同的库中并且您的库中没有访问权限(例如该方法是内部的),则无法对其进行任何操作。

答案 1 :(得分:1)

IEnumerable并不包含任何ToCollection方法。在您的基类中使用扩展方法转换为集合。看看&#34;使用&#34;在您的基类中注册,以找到您应该在派生类中编写的必要命名空间。