У меня есть класс, который в основном является оберткой для большого массива и некоторой связанной служебной работы. У меня есть функция, которая принимает параметр ref. Когда я передаю экземпляр класса в функцию, я хочу, чтобы массив отправлялся.
Я считал явные приведения. Допустим, у меня есть какая-то функция с параметром byte [] ref.
public void SomeFunction(ref byte[] someBytes);
И у меня есть какой-то класс с перегруженным явным приведением.
class SomeClass
{
byte[] someBytes;
public static explicit operator byte[](SomeClass someInstance)
{
return someInstance.someBytes;
}
}
Теперь я хочу вызвать функцию с классом в качестве параметра
SomeClass someInstance = new SomeClass();
SomeFunction(ref (byte[]) someInstance);
Компилятор жалуется, что «аргумент ref или out должен быть присваиваемой переменной». Я не уверен, что мне просто не удается правильно помассировать компилятор или вы просто не можете этого сделать.
Я рассмотрел возвращаемое значение свойства или функции, но вы не можете передать их по ссылке (и после обучения я понимаю, почему ...)
Я бы предпочел не делать массив открытым полем, но это удовлетворяет компилятору.
Я предположим Я мог бы просто создать локальную переменную для ссылки на массив, но это дополнительная строка кода до и после каждого вызова функции ...
РЕДАКТИРОВАТЬ: возможно, стоит отметить, что SomeFunction была написана третьей стороной, и у меня нет доступа, чтобы изменить его. Хуже того, я не думаю, что их параметр на самом деле должен быть ref ...