Compartir a través de


Error del compilador CS0193

El operador * o -> debe aplicarse a un puntero de datos

El operador * o -> se usó con un tipo que no es de puntero o con un puntero de función. Los punteros de función no se pueden desreferenciar en C#. Para obtener más información, vea Tipos de puntero y punteros de función.

El ejemplo siguiente genera el error CS0193:

// CS0193.cs  
using System;  
  
public struct Age  
{  
   public int AgeYears;  
   public int AgeMonths;  
   public int AgeDays;  
}  
  
public class MyClass  
{  
   public static void SetAge(ref Age anAge, int years, int months, int days)  
   {  
      anAge->Months = 3;   // CS0193, anAge is not a pointer  
      // try the following line instead  
      // anAge.AgeMonths = 3;  
   }  
  
   public static void Main()  
   {  
      Age MyAge = new Age();  
      Console.WriteLine(MyAge.AgeMonths);  
      SetAge(ref MyAge, 22, 4, 15);  
      Console.WriteLine(MyAge.AgeMonths);  
   }  
}  

En el ejemplo siguiente se muestra que los punteros de función no se pueden desreferenciar en C#, a diferencia de C/C++:

unsafe class FunctionPointerExample
{
    public static void Log() { /* ... */ }
    
    public static unsafe void Example()
    {
        delegate*<void> fp = &Log;   // pointer to managed function Log()
        fp();                        // OK; call Log() via function pointer
        (*fp)();                     // Error; CS0193, function pointers cannot be dereferenced
    }
}