2012-01-26 4 views
1

У меня есть структура, которую я создал специально для usercontrol. Я думал, что у меня будет публичное имущество Guid Dictionary<string, Guid> Attachments, а затем конвертировать его в мой личный List<Attachment> attachments на сеттер. У меня проблемы с этим, желательно с linq, но я открыт для альтернатив. Спасибо ...Конвертировать словарь в список <struct>

private List<Attachment> attachments; 
public struct Attachment 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
} 
public Dictionary<string, Guid> Attachments 
{ 
    get { return attachments.ToDictionary(a => a.Name, a => a.Id); } 
    set { attachments = new List<Attachment> // not sure what to do here } 
} 
+2

Почему вы раскрываете свой «Список » таким образом? И ваши 'get', и' set' будут очень дорогими для чего-либо большего, чем несколько элементов, и похоже, что вы ничего не набираете. – Yuck

+0

@Yuck Я все еще учусь, что бы вы предложили? Мой пользовательский контроль требует идентификатора и имени вложения и возможных дополнительных свойств в будущем. Полагаю, я мог бы просто пойти со словарем и вообще не использовать структуру, но я хотел бы услышать ваши предложения. Спасибо Yuck – bflemi3

ответ

5

Предполагая, что это правильный дизайн (я действительно не думал об этом) Я подозреваю, что вы хотите:

attachments = value.Select(pair => new Attachment { Id = pair.Value, 
                Name = pair.Key }) 
        .ToList(); 

Я сильно отговорить вас от использования хотя и изменчивая структура. Использование структура не так уж плохо само по себе, но я бы изменить его на:

public struct Attachment 
{ 
    private readonly Guid id; 
    private readonly String name; 

    public Guid Id { get { return id; } } 
    public string Name { get { return name; } } 

    public Attachment(Guid id, string name) 
    { 
     this.id = id; 
     this.name = name; 
    } 
} 

... в этот момент преобразование просто:

attachments = value.Select(pair => new Attachment(pair.Value, pair.Key)) 
        .ToList(); 
+0

@JonSkeet Я изменил пару значений ключа на Guid, string. Вы правы, что имеет больше смысла. Спасибо Jon – bflemi3

+0

@JonSkeet Не могли бы вы объяснить, почему эта структура лучше, чем базовая структура, которую я использовал. Спасибо – bflemi3

+1

@ bflemi3: Посмотрите http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil для начала. –

3

Я думаю, что вы хотите:

attachments = value.Select(kvp => new Attachemnt { Id = kvp.Value, Name = kvp.Key }) 
        .ToList(); 
Смежные вопросы