次の静的関数を使用しようとすると、エラーが発生します。
エラー:
期待されるクラス、デリゲート、列挙型、インターフェイス、または構造体
関数(およびクラス):
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)クラスがないようです。
編集:一部のコメント付きコードとのブラケットの不一致-上記のコードは正しく機能しますが、実際の不一致のコードは機能しませんでした。ありがとう!
メソッド定義をクラス/構造体定義に入れる必要があります。メソッド定義はそれらの外に表示できません。
C#/。Netには大文字のS文字列があります- System.String
。しかし、それはあなたの問題ではありません。 @Femarefは正解です-このエラーは、メソッドがクラスの一部ではないことを示しています。
C#は、C++のようにスタンドアロン関数をサポートしていません。すべてのメソッドは、クラス、インターフェース、または構造体定義の本体内で宣言する必要があります。
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)
{
}
}
}