web-dev-qa-db-ja.com

パブリック静的文字列MyFunc()での「期待されるクラス、デリゲート、列挙、インターフェース、または構造」エラー。 「文字列」の代わりは何ですか?

次の静的関数を使用しようとすると、エラーが発生します。

エラー:

期待されるクラス、デリゲート、列挙型、インターフェイス、または構造体

関数(およびクラス):

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

これにより、public static stringの文字列部分にコンパイラが怒って(赤字で)下線を引きます。

したがって、これはstringがクラス、デリゲート、列挙型、インターフェイス、または構造体ではないことを意味すると思います。

文字列または文字列のようなオブジェクトを返すためにstringの代わりに何を使用できますか? C#にはString(大文字のS)クラスがないようです。

編集:一部のコメント付きコードとのブラケットの不一致-上記のコードは正しく機能しますが、実際の不一致のコードは機能しませんでした。ありがとう!

12
Peach

メソッド定義をクラス/構造体定義に入れる必要があります。メソッド定義はそれらの外に表示できません。

24
Femaref

C#/。Netには大文字のS文字列があります- System.String 。しかし、それはあなたの問題ではありません。 @Femarefは正解です-このエラーは、メソッドがクラスの一部ではないことを示しています。

C#は、C++のようにスタンドアロン関数をサポートしていません。すべてのメソッドは、クラス、インターフェース、または構造体定義の本体内で宣言する必要があります。

4
Franci Penov

P-Invokeに慣れると、この問題に遭遇しました。 Femaref は正しかった。以下は、すばやく視覚化するためのサンプルコードです。

作業コード:

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

        }
    }
}

壊れたコード:

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

        }
    }
}
0