将参数传递给COM时使用强类型

时间:2014-06-23 04:16:04

标签: c# .net

我正在编写一个调用COM组件的C#程序。 COM方法接受对象类型的参数,我试图找到一种干净的方式来调用函数。

假设我想调用一个带有COMObject.GetNodeList(ref object nNodeList)签名的方法,它返回一个节点ID数组(即nNodeList的数组为int),有什么方法我可以调用函数并直接传递int[]参数?

目前我必须编写如下代码:

    private void Update()
    {
        object ids = null;

        ids = new object[this.OSG.GetNodeCount()];
        this.OSG.GetNodeList(ref ids);

        for (int i = 0; i <= ((int[])ids.Count() - 1; i++)
            this.Add(ids[i]);
    }

或编译器因类型不匹配而抱怨。我真正想写的是:

    private void Update()
    {
        int[] ids = null;

        ids = new int[this.OSG.GetNodeCount()];
        this.OSG.GetNodeList(ref ids);

        for (int i = 0; i <= ids.Count() - 1; i++)
            this.Add(ids[i]);
    }

所以我不必一直进行类型转换。

VB.NET允许我这样做,所以肯定有一种方法可以在C#中做到这一点吗?

1 个答案:

答案 0 :(得分:0)

我觉得自己像个白痴。解决方案是动态关键字。

    private void Update()
    {
        dynamic ids;

        ids = new int[this.OSG.GetNodeCount()];
        this.OSG.GetNodeList(ref ids);

        for (int i = 0; i <= ids.Length - 1; i++)
            this.Add(ids[i]);
    }

显然缺乏智能感觉有点无聊。一旦VB.NET比C#更好用?