Błąd kompilatora CS1666
Nie można używać buforów o stałym rozmiarze zawartych w wyrażeniach niefiksowanych. Spróbuj użyć stałej instrukcji.
Ten błąd występuje, jeśli używasz buforu o stałym rozmiarze w wyrażeniu obejmującym wystąpienie, które nie jest samo naprawione. Środowisko uruchomieniowe może swobodnie przenosić niefiksowane wystąpienie w celu zoptymalizowania dostępu do pamięci, co może prowadzić do błędów podczas korzystania z buforu o stałym rozmiarze. Aby uniknąć tego błędu, użyj instrukcji fixed
.
Poniższy przykład generuje CS1666.
// CS1666.cs
// compile with: /unsafe /target:library
unsafe struct S
{
public fixed int buffer[1];
}
unsafe class Test
{
S field = new S();
private bool example1()
{
return (field.buffer[0] == 0); // CS1666 error
}
private bool example2()
{
// OK
fixed (S* p = &field)
{
return (p->buffer[0] == 0);
}
}
private bool example3()
{
S local = new S();
return (local.buffer[0] == 0);
}
}
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię: