#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. я немного поискал линтер или что-то подобное, но ничего не нашел. это вроде того, что я понял. спасибо за окончательный ответ.