C# 尝试使用字典中的Visio Shape

C# 尝试使用字典中的Visio Shape,c#,dictionary,visio,C#,Dictionary,Visio,我正在使用Visio和c#,我对Visio中的形状有问题 我提供了一个带有字符串和Visio形状的字典 SortedDictionary<string, Visio.Shape> DicShapes = new SortedDictionary<string, Visio.Shape>(); DicShapes.Add("Pos3", shape_Pos3); SortedDictionary DicShapes =新的

我正在使用Visio和c#,我对Visio中的形状有问题

我提供了一个带有字符串和Visio形状的字典

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

DicShapes.Add("Pos3", shape_Pos3);
SortedDictionary DicShapes
=新的SortedDictionary();
添加(“Pos3”,shape_Pos3);
因此,如果我现在尝试使用Visio.Shape,我会得到一个ComExection

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

谁能告诉我我做错了什么吗?

既然你说你的钥匙是独一无二的,我建议你

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");

您需要首先调查COM错误。这是怎么一回事?哪一行?由beginxCell和kvp2.value创建错误。您确定您将在
SortedDictionary
中处理重复的键,还是您的键位置是唯一的?