Consider the following code:
private static void Main(string[] args)
{
var ar = new double[]
{
100
};
FillTo(ref ar, 5);
Console.WriteLine(string.Join(",", ar.Select(a => a.ToString()).ToArray()));
}
public static void FillTo(ref double[] dd, int N)
{
if (dd.Length >= N)
return;
double[] Old = dd;
double d = double.NaN;
if (Old.Length > 0)
d = Old[0];
dd = new double[N];
for (int i = 0; i < Old.Length; i++)
{
dd[N - Old.Length + i] = Old[i];
}
for (int i = 0; i < N - Old.Length; i++)
dd[i] = d;
}
The result in Debug mode is: 100,100,100,100,100. But in Release mode it is: 100,100,100,100,0.
What is happening?
It was tested using .NET framework 4.7.1 and .NET Core 2.0.0.
Console.WriteLine(i);
into the final loop (dd[i] = d;
) "fixes" it, which suggests a compiler bug or JIT bug; looking into the IL... – Penitenceif (dd.Length >= N) return;
, which may be a simpler repro. – Motheaten