“Expected class, delegate, enum, interface or stru

2019-02-12 11:09发布

问题:

I'm getting an error when I attempt to use the following static function.

Error:

Expected class, delegate, enum, interface, or struct

Function (and class):

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;
        }
    } 
}

This is causing the compiler to angrily (in red) underline the string part of public static string.

So, I assume this means string is not a class, delegate, enum, interface, or struct.

What can I use instead of string to return a string or string-like object? There doesn't appear to be a String (capital S) class in C#.

Edit: Bracket mis-match with some commented code - the above code works correctly, my actual mis-matched code didn't. Thanks!

回答1:

You need to put the method definition into a class/struct definition. Method definitions can't appear outside those.



回答2:

There is a capital S String in C#/.Net - System.String. But that is not your problem. @Femaref got it right - this error is indicating that your method is not part of a class.

C# does not support standalone functions, like C++ does. All methods have to be declared within the body of a class, interface or struct definition.



回答3:

I ran into this problem when getting re-acquainted with P-Invoke. Femaref had it right. Here's some sample code for quick visualization purposes:

Working Code:

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)
        {

        }
    }
}

Broken Code:

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)
        {

        }
    }
}