2012-05-04 2 views
1

Я работаю с Visio и C#, и у меня проблема с фигурами из Visio.C# пытаюсь использовать Visio Shape из словаря

я обеспечиваю словарь с строки и Shape Visio

SortedDictionary<string, Visio.Shape> DicShapes 
         = new SortedDictionary<string, Visio.Shape>(); 

DicShapes.Add("Pos3", shape_Pos3); 

Так что, если я теперь пытаюсь использовать Visio.Shape я получил COMExeption.

foreach (KeyValuePair<string, Visio.Shape> kvp2 in DicShapes) 
{ 
    if (kvp2.Key == "Pos3") 
    { 
     beginXCell.GlueToPos(kvp2.Value, 0.5, 1); 
    } 
} 

Может ли кто-нибудь дать мне подсказку, что я делаю неправильно?

+0

Вы должны исследовать ошибку COM первой. Что это? Какая линия? –

+0

его значением beginxCell и kvp2.value создает ошибку. – Moosli

+0

Вы уверены, что будете иметь дело с дублирующими ключами в своем 'SortedDictionary' или ваш ключ * Pos3 * скорее будет уникальным? – Filburt

ответ

2

Поскольку вы заявили, что ваши ключи будут уникальными, я предложил бы

Visio.Shape selectedShape; 

if (DicShapes.TryGetValue("Pos3", out selectedShape)) 
{ 
    beginXCell.GlueToPos(selectedShape, 0.5, 1); 
} 

вместо итерации по всем SortedDictionary.

Если вам приходится иметь дело с неоднородными ключами можно извлечь нужную подгруппу с помощью метода расширения Linq:

var filtered = DicShapes.Where(kvp => kvp.Key == "Pos3"); 
+0

спасибо, сейчас работает perfekt. :) – Moosli

Смежные вопросы