Я столкнулся с ошибкой в коде, которая воспроизводится только тогда, когда код построен с включенными оптимизациями. Я создал консольное приложение, которое реплицирует логику тестирования (код ниже). Вы увидите, что при включенной оптимизации «значение» становится нулевым после выполнения этой ошибочной логики:Ошибка только при оптимизации оптимизации компиляции
if ((value == null || value == new string[0]) == false)
Исправления прямо вперед, и комментируется ниже кода обижая. Но ... Меня больше беспокоит, что я, возможно, столкнулся с ошибкой на ассемблере или, возможно, у кого-то есть объяснение, почему значение получает значение null.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace memory_testing
{
class Program
{
sta tic void Main(string[] args)
{
while(true)
{
Console.Write("Press any key to start...");
Console.ReadKey();
Console.WriteLine();
PrintManagerUser c = new PrintManagerUser();
c.MyProperty = new string[1];
}
}
}
public class PrintManager
{
public void Print(string key, object value)
{
Console.WriteLine("Key is: " + key);
Console.WriteLine("Value is: " + value);
}
}
public class PrintManagerUser
{
public string[] MyProperty
{
get { return new string[100]; }
set
{
Console.WriteLine("Pre-check Value is: " + value);
if ((value == null || value == new string[0]) == false)
{
Console.WriteLine("Post-check Value is: " + value);
new PrintManager().Print("blah", value);
}
//if (value != null && value.Length > 0)
//{
// new PrintManager().Print("blah", value);
//}
}
}
}
}
Нормальный вывод должен быть:
Pre-check Value is: System.String[]
Post-check Value is: System.String[]
Key is: blah
Value is: System.String[]
Выход багги:
Pre-check Value is: System.String[]
Post-check Value is:
Key is: blah
Value is:
Мой Env является виртуальной машине под управлением Windows Server 2003 R2 с .NET 3.5 SP1 , Использование VS2008 Team System.
Спасибо,
Brian
Ясно, что оптимизатор сердится на вас за использование '== false' вместо применения! оператора к выражению. – iandisme
Ох, это * есть * интересно. Переход в отражатель ... –
Haha –
bmancini