Erro do Compilador CS1708
Buffers de tamanho fixo só podem ser acessados por meio de locais ou campos
Um novo recurso do C# 2.0 é a capacidade de definir uma matriz em linha dentro de um struct
. Essas matrizes só podem ser acessadas por meio de variáveis locais ou campos e não podem ser referenciadas como valores intermediários no lado esquerdo de uma expressão. Além disso, as matrizes não podem ser acessadas por campos que sejam static
ou readonly
.
Para resolver esse erro, defina uma variável de matriz e atribua a matriz em linha à variável. Também é possível remover o modificador static
ou readonly
do campo que representa a matriz em linha.
Exemplo
O exemplo a seguir gera o erro CS1708.
// CS1708.cs
// compile with: /unsafe
using System;
unsafe public struct S
{
public fixed char name[10];
}
public unsafe class C
{
public S UnsafeMethod()
{
S myS = new S();
return myS;
}
static void Main()
{
C myC = new C();
myC.UnsafeMethod().name[3] = 'a'; // CS1708
// Uncomment the following 2 lines to resolve:
// S myS = myC.UnsafeMethod();
// myS.name[3] = 'a';
// The field cannot be static.
C._s1.name[3] = 'a'; // CS1708
// The field cannot be readonly.
myC._s2.name[3] = 'a'; // CS1708
}
static readonly S _s1;
public readonly S _s2;
}
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de