Ошибка преобразования VB в C # (инструкции assign и if)

#c# #vb.net #rpa #uipath

#c# #vb.net #rpa #uipath

Вопрос:

каков правильный способ преобразования

 if((year mod 4=0 and year mod 100<>0) or (year mod 400=0), “Leap Year”, “Not a Leap Year”)
  

В C#

Мне удалось успешно преобразовать первую часть if ((year % 4 == 0 amp; year % 100 != 0) | (year % 400 == 0)) , но когда я добавляю сообщения, я получаю сообщение об ошибке.

Будем признательны за любую помощь.

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

1. @MindSwipe, на самом деле это не так. В VB у вас есть логические операторы с коротким замыканием AndAlso и OrElse , логические операторы без короткого замыкания And и Or и побитовые операторы And и Or . Для всех них существуют эквиваленты C #, и, как и в VB, логические операторы без короткого замыкания и побитовые операторы одинаковы. То есть в C # у вас есть логические операторы с коротким замыканием amp;amp; и || , логические операторы без короткого замыкания amp; и | и побитовые операторы amp; и | .

2. @MindSwipe, вы, вероятно, просто никогда не сталкивались с логическими операторами без короткого замыкания в C #, потому что их практически никто не использует, поскольку практически никто не должен. То же самое верно и в VB, но из-за всей истории VB6 и ранее, где не было операторов короткого замыкания, многие люди используют неправильные.

3. вау, только что узнал об операторах без короткого замыкания!

4. @jmcilhinney интересно, я этого не знал. Мои знания VB начинаются и заканчиваются через 45 минут игры с макросами MS Office. Однако я столкнулся с операторами короткого замыкания и без короткого замыкания в C #, они просто вылетели у меня из головы, поскольку (как вы сказали, и по уважительной причине) их практически никто не использует

5. Кстати, оптимистичный код. В следующий раз, когда это действительно будет полезнее, чем простой mod 4, это 2100. Очень немногие из нас, читающих это, будут тогда живы. Интересно, будет ли код все еще выполняться.

Ответ №1:

Эквивалентом этого оператора VB If является тернарный оператор C # ( ?: ), т.е.

 If(x, y, z)
  

эквивалентно:

 x ? y : z;
  

Между прочим, есть еще один If такой оператор:

 If(x, y)
  

который оценивается как, x если x это не null , в противном случае он оценивается как y . Эквивалент C # называется нулевым объединяющим оператором ( ?? ):

 x ?? y;
  

Ответ №2:

Исходный код VB должен был использовать DateTime.Метод isLeapYear(Int32), так что в C # это стало бы:

 DateTime.IsLeapYear(year) ? "Leap Year" : "Not a Leap Year";
  

Ответ №3:

Ответ в компилируемом коде таков:

 private string LeapYearResponse(int year)
{
    if ((year % 4 == 0 amp;amp; year % 100 != 0) || (year % 400 == 0))
        return "Leap Year";
    else
        return "Not a Leap Year";
}
  

Или более кратко:

 private string LeapYearResponse(int year)
{
   return ((year % 4 == 0 amp;amp; year % 100 != 0) || (year % 400 == 0)) ? "Leap Year" : "Not a Leap Year";
}