#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";
}