“Expected class, delegate, enum, interface or struct” error on public static string MyFunc(). What's an alternative to “string”?

匿名 (未验证) 提交于 2019-12-03 01:49:02

问题:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!