Мне нужно конвертировать набор функций из C ++ в C#. У них есть объявления методов, такие как
void foo(struct input data*, double* ret1, double *ret2)
{
// if ret1 is not NULL, return something in it
if (ret1)
{
*ret1 = SomeComplexAndExpensiveMath(data);
}
if (ret2)
{
*ret2 = MoreComplexAndExpensiveMath(data);
}
}
Когда я преобразую это в C#, параметры out обычно являются предпочтительным выбором, но передача null
аргументу, объявленному как "out double", не допускается:
void foo(input data, out double ret1, out double ret2)
{
if (ret1 != null) // Error.
{
// ...
}
}
Использование ref double?
в качестве типа параметра также выглядит странно и вызывает дополнительные издержки.
Есть ли способ, которым я могу поддерживать красивый простой тип параметра out double
, не вычисляя возвращаемые значения, которые не нужны вызывающей стороне? Есть ли способ узнать, что вызывающий абонент сделал, например, foo(input, out _, out b)
, чтобы указать, что ему не нужен ret1?