不需要引用变量时应传递什么?

3

我正在使用一个基于GIS的数学库,它将较低级别的C/C++代码封装在C#中。许多参数是通过引用传递的,以便接收多个输出。如果我只想要其中一些输出,该如何忽略其他参数?最好的解决方案是创建一个虚拟变量,并通过引用传递并忽略其输出吗?

4个回答

5

创建一个虚拟变量并通过引用传递它并忽略其输出是最好的解决方案吗?

是的,这就是我所做的。


2
这似乎是不必要的。我一直在使用它,但我对改变持开放态度。 - Corey Ogburn
1
这并不是不必要的,因为你无从知道函数在计算过程中是否使用了该变量,例如,如果该变量对函数而言是必要的,即使对你来说不是。 - SColvin

1

通常我在代码中只是创建一个对象,比如:

object NotNeeded = null;

或者使用类似的东西来表明它是一个无关紧要的参数,然后反复使用。不过我不确定这是否有效,因为我不知道 GIS 库在另一侧正在做什么。如果它需要每个参数都有一个实际的非空值,那可能会有问题。


在引发这个问题的实例中,您向它传递一个文件,并通过“ref”参数获取有关文件中字段数据的各种信息。这次传递null也可以,但我确实理解您的担忧。有其他地方我不能这样做。 - Corey Ogburn

1

你有几个选择:

  • 虚拟对象
  • 包装方法
  • 更改Interop Imports。你的ref参数很可能是C++中的指针,如果它们允许null,那么你可以更改导入以使用指针(IntPtr)并传递null / IntPtr.Zero

但是,除非你有很多很多调用,否则一些虚拟对象可能是最好的(最容易阅读)选项。


0

据我所知,"最佳"的编译时方法是:foo(bar, ref dummy) -- 但如果有意义的话,可以随意包装这些虚拟变量。

如果存在实例方法,则创建适当的扩展方法包装器可以帮助以相对无缝的方式隐藏 "无用" 的虚拟变量。

祝编码愉快。


很遗憾它们是静态方法,除非你能为静态类添加扩展吗?我认为不行... - Corey Ogburn
@Corey Ogburn 一个人是无法做到的 :-) 然而,有多种方法可以包装访问,包括使用自定义包装类并通过它来引导所有访问。应该考虑总体付出与收益之间的比较,但这可能是另一种选择。 - user166390
我不知道...这会使它成为一个包装器的包装器。对于这种情况,投入与收益之间的努力导致我只使用虚拟变量。 - Corey Ogburn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接