Что передать для ненужных ref-переменных? - PullRequest
2 голосов
/ 18 мая 2011

Я работаю с математической библиотекой на основе ГИС, которая оборачивает код C / C ++ более низкого уровня в C #. Многие параметры передаются по ссылке для получения нескольких выходов. Если мне нужны только некоторые выходы, как я могу игнорировать другие параметры? Является ли лучшее решение для создания фиктивной переменной и передачи ее по ссылке и игнорирования ее вывода?

Ответы [ 4 ]

4 голосов
/ 18 мая 2011

Является ли лучшее решение для создания фиктивной переменной и передачи ее по ссылке и игнорирования ее вывода?

Да, я так и делаю.

1 голос
/ 18 мая 2011

У вас есть несколько вариантов:

  • пустышки
  • методы обёртки
  • изменить Interop Imports.Ваши параметры ref, скорее всего, являются указателями в C ++, и если они разрешают null, вы можете изменить импорт, чтобы использовать указатели (IntPtr) и передавать null / IntPtr.Zero.

Но несколько манекенов - это, вероятно, лучший (самый легкий для чтения) вариант, если у вас не очень много, много вызовов.

1 голос
/ 18 мая 2011

Я обычно просто создаю объект в моем коде, как

object NotNeeded = null;

или что-то подобное, что говорит о том, что это фактически ненужный параметр, а затем используйте его повторно. Я не уверен, будет ли это работать или нет, потому что я не уверен, что библиотека ГИС делает с другой стороны. Если для каждого из них требуется фактическое ненулевое значение, это может быть проблематично.

0 голосов
/ 18 мая 2011

«Лучший» - это «единственный» метод времени компиляции, о котором я знаю: foo(bar, ref dummy) - но не стесняйтесь оборачивать эти фиктивные переменные, если это имеет смысл.

Если существуют методы экземпляра, создание соответствующих расширенных методов упаковщиков может помочь скрыть «бесполезные» фиктивные переменные относительно беспрепятственно.

Удачного кодирования.

...