我正在使用一个基于GIS的数学库,它将较低级别的C/C++代码封装在C#中。许多参数是通过引用传递的,以便接收多个输出。如果我只想要其中一些输出,该如何忽略其他参数?最好的解决方案是创建一个虚拟变量,并通过引用传递并忽略其输出吗?
创建一个虚拟变量并通过引用传递它并忽略其输出是最好的解决方案吗?
是的,这就是我所做的。
通常我在代码中只是创建一个对象,比如:
object NotNeeded = null;
或者使用类似的东西来表明它是一个无关紧要的参数,然后反复使用。不过我不确定这是否有效,因为我不知道 GIS 库在另一侧正在做什么。如果它需要每个参数都有一个实际的非空值,那可能会有问题。
你有几个选择:
ref
参数很可能是C++中的指针,如果它们允许null
,那么你可以更改导入以使用指针(IntPtr)并传递null
/ IntPtr.Zero
。但是,除非你有很多很多调用,否则一些虚拟对象可能是最好的(最容易阅读)选项。
据我所知,"最佳"的编译时方法是:foo(bar, ref dummy)
-- 但如果有意义的话,可以随意包装这些虚拟变量。
如果存在实例方法,则创建适当的扩展方法包装器可以帮助以相对无缝的方式隐藏 "无用" 的虚拟变量。
祝编码愉快。