Я знаю, что не могу сравнить int? и int , но следующий код компилируется и работает просто хорошо (VS2022, .net 4.8).
using System;
namespace MyTestApp
{
internal class Program
{
static void Main(string[] args)
{
int? v = null;
if (v > 0)
{
Console.WriteLine("Somehow compiled?");
}
}
}
}
< /code>
CHATGPT Очень категорически соглашается с тем, что компиляция не удастся с < /p>
cs0266: не может быть неявно преобразовать тип 'bool?' Чтобы 'bool'.
Я могу в разборке, что сгенерированный код явно вызывает getValueordefault () и get_hasvalue () . < /p>
Я в замешательстве, это новое поведение компилятора? int? v = null;
0178087F lea edi,[ebp-44h]
01780882 xorps xmm0,xmm0
01780885 movq mmword ptr [edi],xmm0
if (v > 0)
01780889 lea edi,[ebp-50h]
0178088C lea esi,[ebp-44h]
0178088F movq xmm0,mmword ptr [esi]
01780893 movq mmword ptr [edi],xmm0
01780897 xor edx,edx
01780899 mov dword ptr [ebp-54h],edx
0178089C lea ecx,[ebp-50h]
0178089F call System.Nullable`1[[System.Int32, mscorlib]].GetValueOrDefault() (70081820h)
017808A4 mov dword ptr [ebp-58h],eax
017808A7 mov eax,dword ptr [ebp-58h]
017808AA cmp eax,dword ptr [ebp-54h]
017808AD setg al
017808B0 movzx eax,al
017808B3 mov dword ptr [ebp-5Ch],eax
017808B6 lea ecx,[ebp-50h]
017808B9 call System.Nullable`1[[System.Int32, mscorlib]].get_HasValue() (700817F0h)
017808BE mov dword ptr [ebp-60h],eax
017808C1 mov eax,dword ptr [ebp-5Ch]
017808C4 and eax,dword ptr [ebp-60h]
017808C7 and eax,0FFh
017808CC mov dword ptr [ebp-48h],eax
017808CF cmp dword ptr [ebp-48h],0
017808D3 je MyTestApp.Program.Main(System.String[])+09Bh (017808E3h)
{
017808D5 nop
Console.WriteLine("Somehow compiled?");
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-c-sharp
Оператор подъемника в C# [Duplicate] ⇐ C#
Место общения программистов C#
1739512291
Anonymous
Я знаю, что не могу сравнить int? и int , но следующий код компилируется и работает просто хорошо (VS2022, .net 4.8).
using System;
namespace MyTestApp
{
internal class Program
{
static void Main(string[] args)
{
int? v = null;
if (v > 0)
{
Console.WriteLine("Somehow compiled?");
}
}
}
}
< /code>
CHATGPT Очень категорически соглашается с тем, что компиляция не удастся с < /p>
cs0266: не может быть неявно преобразовать тип 'bool?' Чтобы 'bool'.
Я могу в разборке, что сгенерированный код явно вызывает getValueordefault () и get_hasvalue () . < /p>
Я в замешательстве, это новое поведение компилятора? int? v = null;
0178087F lea edi,[ebp-44h]
01780882 xorps xmm0,xmm0
01780885 movq mmword ptr [edi],xmm0
if (v > 0)
01780889 lea edi,[ebp-50h]
0178088C lea esi,[ebp-44h]
0178088F movq xmm0,mmword ptr [esi]
01780893 movq mmword ptr [edi],xmm0
01780897 xor edx,edx
01780899 mov dword ptr [ebp-54h],edx
0178089C lea ecx,[ebp-50h]
0178089F call System.Nullable`1[[System.Int32, mscorlib]].GetValueOrDefault() (70081820h)
017808A4 mov dword ptr [ebp-58h],eax
017808A7 mov eax,dword ptr [ebp-58h]
017808AA cmp eax,dword ptr [ebp-54h]
017808AD setg al
017808B0 movzx eax,al
017808B3 mov dword ptr [ebp-5Ch],eax
017808B6 lea ecx,[ebp-50h]
017808B9 call System.Nullable`1[[System.Int32, mscorlib]].get_HasValue() (700817F0h)
017808BE mov dword ptr [ebp-60h],eax
017808C1 mov eax,dword ptr [ebp-5Ch]
017808C4 and eax,dword ptr [ebp-60h]
017808C7 and eax,0FFh
017808CC mov dword ptr [ebp-48h],eax
017808CF cmp dword ptr [ebp-48h],0
017808D3 je MyTestApp.Program.Main(System.String[])+09Bh (017808E3h)
{
017808D5 nop
Console.WriteLine("Somehow compiled?");
Подробнее здесь: [url]https://stackoverflow.com/questions/79438314/lifter-operator-in-c-sharp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия