1

C# に変換しようとしている vb.net プロジェクトがあります。MyWebExtension.vb という名前のファイルがあり、その中に次のコード行があります#If _MyType <> "Empty" Then

C#に変換してみた#if (_MyType != "Empty")

アプリケーションを実行すると、次のエラーが表示されます。

プリプロセッサ式が無効です。

変換で何が間違っていましたか?

4

2 に答える 2

2

#defineC# では、VB で許可されている定数値ではなく、「フラグ」のみを指定できます。

C# では、次のものを使用できます。

#define _MyType

#If _MyType

また:

#if ! _MyType

しかしVBでは、次のことができます:

#Const _MyType = "SomeType"

#If _MyType = "SomeType"

これに対する適切な回避策はありません。定数を使用できますが、もちろんこれらはクラス内からしか参照できません。

于 2013-02-25T17:07:54.707 に答える
1

コンパイラ エラー CS1517から

次のサンプルは、有効なプリプロセッサ式と無効なプリプロセッサ式を示しています。

#if symbol      // OK
#endif
#if !symbol     // OK
#endif
#if (symbol)    // OK
#endif
#if true        // OK
#endif
#if false       // OK
#endif
#if 1           // CS1517
#endif
#if ~symbol     // CS1517
#endif
#if *           // CS1517
#endif

class x
{
   public static void Main()
   {
   }
}

だから私はあなたがこのように使うことができると思います;

#define _MyType

#If _MyType

#ifから

C# コンパイラが #if ディレクティブに遭遇し、最終的に #endif ディレクティブが続くと、指定されたシンボルが定義されている場合にのみ、ディレクティブ間のコードがコンパイルされます。C や C++ とは異なり、シンボルに数値を割り当てることはできません。C# の #if ステートメントはブール値であり、シンボルが定義されているかどうかのみをテストします。

#define DEBUG
// ...
#if DEBUG
    Console.WriteLine("Debug version");
#endif

演算子 == (等値)、!= (不等値) は、 true または false をテストするためにのみ使用できます。True は、シンボルが定義されていることを意味します。ステートメント -#if DEBUG は #if (DEBUG == true) と同じ意味です。演算子 && (and)、および || > (or) は、複数のシンボルが定義されているかどうかを評価するために使用できます。記号と演算子を括弧でグループ化することもできます。

于 2013-02-25T17:02:59.203 に答える