В соответствии с этим здесь
Левый будет оцениваться до правого ...
Но у меня есть проект, где:
int[] df = null; //GetDataFrame()
int xIndex = 12; //GetLearningIndex()
df[0] = 1 % GetLearningIndex();
И я понял, что когда GetDataFrame возвращает ноль , а GetLearningIndex возвращает ноль, я получаю System.DivideByZeroException
, который я ожидал в соответствии с подобным { {X1}} ... есть причина почему ??
2 ответа
Вы на самом деле ссылаетесь на неправильный документ. Как упоминалось в фактическом операторе присваивания < em> оценивается наконец. Таким образом, ваш вызов метода, а также математическая операция (%
оцениваются перед уступкой assignemtn в DivideByZeroException
.
Кроме того, оператор присваивания оценивается справа налево, в отличие от всех других двоичных, которые оцениваются слева направо:
За исключением операторов присваивания, все бинарные операторы являются левоассоциативными, что означает, что операции выполняются слева направо. Например, x + y + z оценивается как (x + y) + z. Операторы присваивания и условный оператор (? :) являются ассоциативными справа, что означает, что операции выполняются справа налево. Например, x = y = z оценивается как x = (y = z).
Левые операнды вычисляются первыми, когда дело доходит до математических операций. В вашем случае вы вызываете метод, который возвращает значение: GetLearningIndex()
, значение которого всегда будет оцениваться перед любой математической операцией, с которой вы его используете.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.