Error del compilador CS1944
Actualización: noviembre 2007
Mensaje de error
Un árbol de expresión no puede contener una operación de puntero no segura
An expression tree may not contain an unsafe pointer operation
Los árboles de expresión no admiten tipos de puntero porque al método Expression<TDelegate>.Compile sólo se le permite generar código comprobable. Vea comentarios.
Para corregir este error
- No utilice tipos de puntero al intentar crear un árbol de expresión.
Ejemplo
El ejemplo siguiente genera el error 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
}
}
En algunas situaciones resulta acertado tener punteros en árboles de expresión. Por ejemplo, considere el siguiente código:
Expression<Func<int*[], int*[]>) e = (int*[] i)=>i;
Este código es un árbol de expresión válido porque ningún argumento de tipo es un tipo de puntero. Son matrices de punteros y las matrices no son tipos de puntero. Además, el cuerpo del árbol de expresión no realiza operaciones peligrosas con ningún puntero.