У меня есть два следующих метода:
private void AddHeaderAttachment(AAttachment attachment) {
string parentId = attachment.ParentId;
if (this.collectionByIds.TryGetValue(attachment.Id, out MyCollection collection)) {
if (!collection.AAttachmentByParentIds.TryGetValue(parentId, out List<AAttachment> attachmentList)) {
attachmentList = new List<AAttachment>();
collection.AAttachmentByParentIds.Add(parentId, attachmentList);
}
attachmentList.Add(attachment);
}
}
private void AddLineAttachment(BAttachment attachment) {
string parentId = attachment.ParentId;
if (this.collectionByIds.TryGetValue(attachment.Id, out MyCollection collection)) {
if (!collection.BAttachmentByParentIds.TryGetValue(parentId, out List<BAttachment> attachmentList)) {
attachmentList = new List<BAttachment>();
collection.BAttachmentByParentIds.Add(parentId, attachmentList);
}
attachmentList.Add(attachment);
}
}
Класс MyCollection
выглядит следующим образом:
public class MyCollection {
public Dictionary<string, List<AAttachment>> AAttachmentByParentIds = new Dictionary<string, List<AAttachment>>();
public Dictionary<string, List<BAttachment>> BAttachmentByParentIds = new Dictionary<string, List<BAttachment>>();
}
Как видите, единственные различия между этими двумя методами выше являются:
- Предоставляемый тип
- Свойство
MyCollection
, к которому будет добавлено вложение.
Однако оба AAttachment
и BAttachment
реализовать:
interface Attachable {
string ParentId { get; }
}
Я хотел бы создать один метод многократного использования.
Но у меня есть две очевидные проблемы:
- Если я изменю внутренняя
if
в:
if (!collection.AAttachmentByParentIds.TryGetValue(parentId, out List<Attachable> attachmentList)) {
attachmentList = new List<Attachable>();
collection.lineAttachmentByParentIds.Add(parentId, attachmentList);
}
Visual Studio сообщает мне «Аргумент 2: невозможно преобразовать out List<Attachable>
в out List<AttachmentA>
и
Как я могу изменить, ссылаюсь ли я
AAttachmentByParentIds
или
BAttachmentByParentIds
на экземпляр MyCollection?