CS1944 de erro do compilador
Mensagem de erro
Uma árvore de expressão não pode conter uma operação de ponteiro inseguro
Árvores de expressão não oferecem suporte a tipos ponteiro porque o Expression<TDelegate>.Compile método só é permitido para produzir código verificável. Consulte comentários.
Para corrigir este erro
- Não use tipos ponteiro quando você está tentando criar uma árvore de expressão.
Exemplo
O exemplo a seguir gera CS1944:
// cs1944.cs
// Compile with: /unsafe
using System.Linq.Expressions;
unsafe class Test
{
public delegate int* D(int i);
static void Main()
{
Expression<D> tree = x => &x; // CS1944
}
}
using System.Linq.Expressions;
unsafe class Test
{
public delegate int* D(int i);
static void Main()
{
Expression<D> tree = x => &x; // CS1944
}
}
Em algumas situações é já pode ter ponteiros em árvores de expressão.Por exemplo, considere o código a seguir:
Expression<Func<int*[], int*[]>) e = (int*[] i)=>i;
Esse código é uma árvore de expressão válida porque não há argumentos de tipo são tipos ponteiro.Eles são matrizes de ponteiros e matrizes não são tipos de ponteiro.Além disso, o corpo da árvore de expressão não faz nada perigoso com qualquer ponteiro.