Как вызвать разрыв Nullable?C#

Место общения программистов C#
Anonymous
Как вызвать разрыв Nullable?

Сообщение Anonymous »

Если я запускаю приведенный ниже код в режиме x86 (32-разрядный) (.NET Framework 4.7.2 на последней машине с Windows 11), то, как и ожидалось, он записывает на консоль (доказывая, что считанные данные не являются одним из двух записываемых значений) из-за разрыва: Так что это ожидаемо. И основываясь на этих ссылках, а также комментариях Липперта на https://ericlippert.com/2012/12/20/null ... -part-one/, я ожидал, что Nullable будет также наблюдается разрыв.
И тем не менее, это не так (раскомментируйте код ниже, чтобы воспроизвести его). Конечно, это законно, я уверен. Тот факт, что вам говорят, что что-то небезопасно, не означает, что это определенно не сработает — это совершенно справедливо для того, чтобы это работало. Но мне интересно, почему разрыв не происходит...
Есть ли способ вызвать разрыв на Nullable (только с одним записывающим устройством)?
Бонусные баллы, если вы сможете получить тот же результат при работе на 64-разрядной версии. п>
using System;
using System.Threading.Tasks;

namespace ConsoleApp2
{
public class Program
{
public static void Main(string[] args)
{
long bob = 0;
//long? bob = 0;

long small = 0;
long large = long.MaxValue;

Task.Run(() =>
{
do
{
bob = small;
bob = large;
} while (true);
});

for (long i = 0; i < long.MaxValue - 2; i++)
{
var value = bob;

if (value != small && value != large)
{
Console.WriteLine("very bad");
}
}

Console.WriteLine("finished");
Console.ReadLine();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... llablelong

Вернуться в «C#»