Как я могу вернуть список <MyInterface>в этом сценарии - PullRequest
1 голос
/ 31 июля 2009

Позвольте мне начать с того, что я довольно новичок в использовании интерфейсов.

Я пишу метод (GetClaimDetails), который будет возвращать информацию о заявке на медицинское страхование. Если это тип заявки A, он вернет список класса ClaimDetailA. Если заявка типа B, вернуть список класса ClaimDetailB. Оба эти класса имеют общие свойства, но каждый имеет уникальные свойства. Общие свойства реализованы в интерфейсе.

Я извлек интерфейс с именем IClaimDetail и настроил оба для его реализации. Когда я устанавливаю метод для возврата IClaimDetail и возвращаю экземпляр объекта, который реализует IClaimsDetail, я получаю сообщение компилятора

'Не удалось неявно преобразовать тип' System.Collections.Generic.List DentalClaimDetail 'в' System.Collections.Generic.List IClaimDetail '

  private static List<IClaimDetail> GetClaimDetailsB(string claimNumber, string connectionStringName)
        {

          var claimReportRows = new List<DentalClaimDetail>();
         ..removed for brevity
      return claimReportRows;
    } 



   public class DentalClaimDetail : IClaimDetail
    {
    ...
    }

Когда метод возвращает интерфейс, вы просто возвращаете объект, реализующий интерфейс. Правильный? Что я делаю не так?

Ответы [ 2 ]

7 голосов
/ 31 июля 2009
var claimReportRows = new List<IClaimDetail>();

Просто измени это. Тогда вы сможете вставить DentalClaimDetail в него еще.

1 голос
/ 31 июля 2009

Generics фактически генерирует тип на лету во время компиляции для каждого универсального аргумента, поэтому List - это один тип, а List - фактически другой тип, поэтому вы получите ошибки компилятора. 1003 *

Да, отстой, но просто сменив звонок, как обрисовал в общих чертах Даниэль А. Уайт

var claimReportRows = new List<IClaimDetail>();

(хотя вы должны просто иметь возможность использовать тип напрямую, если вы не используете Linq), а затем использование кода для преобразования DentalClaimDetail в IClaimDetail должно помочь. Если вы не используете Linq, вы можете сделать что-то вроде:

List<IClaimDetail> claimReportRows = new List<IClaimDetail>();
//...populate Dentail Claims Here...
foreach(DentalClaimDetail dcd in dentalClaims)
{
  claimReportRows.Add((IClaimDetail)dcd);
}
return claimReportRows.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...