C # — требуется, чтобы возвращаемый тип присваивался L-значению?

#c# #unity3d #lvalue #ienumerator

#c# #unity3d #lvalue #ienumerator

Вопрос:

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

в частности, Unity3D реализует сопрограммы, которые выглядят следующим образом:

 IEnumerator myCoroutine() {...  yield break;}
  

если вы вызываете myCoroutine() и ничего не делаете с возвращаемым значением (например, вы вызываете его как обычный метод, а не из другого предложения yield или с помощью метода StartCoroutine() ), в результате весь код внутри myCoroutine() не выполняется. однако нет предупреждения о компиляции или времени выполнения. я хотел бы получить ошибку времени компиляции в этом сценарии.

один из подходов, о котором я подумал, — это подкласс IEnumerator, скажем, MyIEnumerator , который добавляет свойство, которое должно быть передано каким-либо образом — либо присвоено L-значению, либо передано методу и т.д.

но я не смог выяснить, существует ли такое требование.

Комментарии:

1. Как вы вызываете myCoroutine функцию? Также откуда вы знаете, что код внутри него не выполняется? Поместите Debu.Log в него свой оператор.

2. @Programmer Как он сказал, если кто-то вызывает метод, который возвращает IEnumerable реализованный с помощью блока итератора, а затем никогда не повторяет его, код итератора никогда не выполняется. Вы можете написать такую программу самостоятельно, если хотите, это довольно понятное поведение.

3. @Программист, я знаю, что код не выполняется, потому что я тестировал его с протоколированием. Я вызываю сопрограмму так, как я описал: как обычный метод, а не как сопрограмма. В этом случае я хотел бы получить ошибку во время компиляции, чтобы сообщить мне, что я допустил ошибку.

4. ОК. Сначала не понял вопрос.

5. просто любопытно, почему отрицательные голоса? это кажется законным вопросом, и я просмотрел документы C # ранее.

Ответ №1:

В C # для этого нет такой функции. Вам нужно будет создать какую-то форму стороннего инструмента анализа кода, чтобы попытаться найти такие случаи, как эти.

Комментарии:

1. я немного поискал линтер или что-то подобное, но ничего не нашел. это вроде того, что я понял. спасибо за окончательный ответ.