我有一个接口IHandler
,可以有多个实现。我想在IHandler
的所有实现中调用一个方法,并整理结果,如下所示:
var identifiers = new List<Identifier>();
foreach(var handler in _handlers.ToList())
{
var ids = handler.PreCheck(postData.ClientId).ToList();
identifiers.AddRange(ids);
}
将_handlers
插入IEnumerabale<IHandler>
到构造函数中。
PreCheck
方法在实现IHandler
时具有以下代码:
public IList<Identifier> PreCheck(int clientId)
{
try
{
var identifiers = new List<Identifier>();
var medications = _service.GetAll(clientId, 1, 3, 0);
foreach(var medication in medications)
{
var identifier = new Identifier();
identifier.ItemIdentifier = medication.MedicationIdentifierId;
identifier.System = Constants.MODULE_NAME;
identifiers.Add(identifier);
}
return identifiers;
}
catch (Exception)
{
throw;
}
}
GetAll
的返回类型为List<MedicationModel>
。
在执行var ids = handler.PreCheck(postData.ClientId).ToList();
行时,将引发异常:
Unable to cast object of type '<OfTypeIterator>d__95`1[Models.Identifier]' to type 'System.Collections.Generic.IList`1[Models.Identifier]'.
更新:IHandler
的代码
public interface IHandler : IEventHandler
{
IList<Identifier> PreCheck(int clientId);
}
这是什么问题?