Почему невозможно объединить возвраты ref в цепочку, если внутренний метод также принимает параметры в C#7?C#

Место общения программистов C#
Ответить
Anonymous
 Почему невозможно объединить возвраты ref в цепочку, если внутренний метод также принимает параметры в C#7?

Сообщение Anonymous »

Я экспериментировал с новыми возможностями C#7 и обнаружил кое-что странное.
В следующем упрощенном сценарии:

Код: Выделить всё

public struct Command
{
}

public class CommandBuffer
{
private Command[] commands = new Command[1024];
private int count;

public ref Command GetNextCommand()
{
return ref commands[count++];
}

public ref Command GetNextCommand(out int index)
{
index = count++;
return ref commands[index];
}
}

public class BufferWrapper
{
private CommandBuffer cb = new CommandBuffer();

// this compiles fine
public ref Command CreateCommand()
{
ref Command cmd = ref cb.GetNextCommand();
return ref cmd;
}

// doesn't compile
public ref Command CreateCommandWithIndex()
{
ref Command cmd = ref cb.GetNextCommand(out int index);
return ref cmd;
}
}
Почему второй метод выдает следующую ошибку компилятора?

Код: Выделить всё

CS8157  Cannot return 'cmd' by reference because it was initialized to a value that cannot be returned by reference
Я знаю, что компилятор не может позволить вам вернуть ссылку на переменную, которая впоследствии может оказаться мертвой, но я не совсем понимаю, как иметь дополнительный выходной параметр каким-либо образом меняет этот сценарий.

Подробнее здесь: https://stackoverflow.com/questions/459 ... ccepts-out
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»