2011-01-28 11 views
12

Viene visualizzato un errore quando tento di utilizzare la seguente funzione statica.Errore "classe prevista, delegato, enum, interfaccia o struttura" sulla stringa statica pubblica MyFunc(). Qual è un'alternativa alla "stringa"?

Errore:

Expected class, delegate, enum, interface, or struct

Funzione (e classe):

namespace MyNamespace 
{ 
    public class MyClass 
    { 
     // Some other static methods that use Classes, delegates, enums, interfaces, or structs 

     public static string MyFunc(string myVar){ 
      string myText = myVar; 
      //Do some stuff with myText and myVar 
      return myText; 
     } 
    } 
} 

Questo causa il compilatore di rabbia (in rosso) sottolineano la parte della stringa di public static string.

Quindi, presumo questo significa che string non è una classe, delegato, enum, interfaccia o struttura.

Cosa posso utilizzare invece di string per restituire una stringa o un oggetto simile a una stringa? Non sembra essere una classe String (maiuscola S) in C#.

Modifica: Staffa mis-match con un po 'di codice commentato - il codice il codice precedente funziona correttamente, i miei veri male assortita non ha fatto. Grazie!

risposta

24

È necessario inserire la definizione del metodo in una definizione di classe/struct. Le definizioni dei metodi non possono apparire al di fuori di quelle.

+0

(ho pensato) E 'stato. Aggiornare il codice per includere quei dettagli ... – Peach

+4

E sono abbastanza sicuro che non lo sia, almeno non ho riscontrato questo particolare errore del compilatore con qualsiasi altra causa. Controlla le tue parentesi, quella potrebbe essere una ragione. – Femaref

+0

Erano le bretelle, buona cattura! – Peach

4

C'è una S maiuscola in C# /. Net - System.String. Ma non è un tuo problema. @Femaref ha capito bene: questo errore indica che il tuo metodo non fa parte di una classe.

C# non supporta le funzioni standalone, come fa il C++. Tutti i metodi devono essere dichiarati all'interno del corpo di una classe, di un'interfaccia o di una definizione di struttura.

+0

giustissimo. Non ho visto la parentesi sbagliata fino a quando non è stato spiegato un po 'meglio. Grazie per il chiarimento. – Peach

0

Mi sono imbattuto in questo problema quando mi sono familiarizzato con P-Invoke. Femaref aveva ragione. Ecco alcuni esempi di codice per scopi di visualizzazione rapida:

Codice lavoro:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Runtime.InteropServices; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
     public static extern IntPtr GetModuleHandle(string lpModuleName); 

     static void Main(string[] args) 
     { 

     } 
    } 
} 

Codice rotto:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Runtime.InteropServices; 

[DllImport("kernel32.dll", CharSet=CharSet.Auto)] 
public static extern IntPtr GetModuleHandle(string lpModuleName); 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

     } 
    } 
}