CS8347/CS8352 с «ref struct» и параметром «in»/«ref»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 CS8347/CS8352 с «ref struct» и параметром «in»/«ref»

Сообщение Anonymous »

У меня есть функция со следующей сигнатурой

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

State MoveForward(in Path path);
— это ссылочная структура
также является ссылочной структурой, содержащей только целое число.
Теперь у меня есть еще одна вспомогательная функция

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

bool TryMoveForward(in Path path, ref State state)
{
// which does something like:
state = MoveForward(path); // "line A"
return !state.IsEnd(); // IsEnd determined by integer != -1
}
В «строке A» я получаю сообщение об ошибке CS8347: невозможно использовать результат «MoveForward» в этом контексте, поскольку он может предоставлять переменные, на которые ссылается параметр «путь», за пределами их объявления. область видимости.
Но я думаю, что этого не должно быть, или, по крайней мере, компилятор может быть достаточно умен, чтобы избежать выдачи этой ошибки по нескольким причинам:

[*]Государство создается просто с целыми числами (компилятор может проверить использование пути). Из "path" нет ссылок.
[*]"State" — это ссылочная структура, которая не содержит никаких "ref", с помощью которых можно было бы выйти.

Как сделать так, чтобы компилятор не жаловался на это?
Я не понимаю, является ли проблемой присвоение чего-либо состоянию ref State или передать путь в параметре.
Если я удалю в MoveForward, ошибка исчезнет. Я хочу сохранить «внутри»
Если я разделю строку, у меня не будет возможности избежать ошибки. например:

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

    var result = MoveForward(path); // "line A"
state = result;
return !state.IsEnd(); // IsEnd determined by integer != -1
Получение CS8352: невозможно использовать переменную «result» в этом контексте, поскольку она может предоставлять ссылочные переменные за пределами области их объявления. имеет собственную память в стеке, и результат должен быть скопирован в состояние, аналогично однострочному оператору.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -parameter
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • CS8347/CS8352 с «ref struct» и параметром «in»/«ref»
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • CS8347 / CS8352 с параметрами «refr struct» и «in» / «ref»
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • CS8347 с «ref struct» и параметром «in»/«ref»
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Polars struct.field(list[str]) возвращает один столбец при работе со списком[Struct]
    Anonymous » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Почему struct {u64} быстрее, чем struct {u32, u32}?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

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