名前空間の使用に関連する警告を解決する
この記事では、次のコンパイラ エラーについて説明します。
- CS0138: エラー: using namespace ディレクティブは名前空間に対してのみ使用できます。"type" は名前空間ではなく型です。
- CS0431: エラー: エイリアスが型を参照しているため、エイリアス "識別子" を
::
と使用できません。代わりに.
を使用してください。 - CS0432: エラー: エイリアス "identifier" が見つかりません。
- CS0576: エラー: 名前空間 "namespace" に、エイリアス "identifier" と競合する定義が含まれています。
- CS0687: エラー: 名前空間エイリアス修飾子
::
は、常に型または名前空間に解決するので、ここでは無効です。代わりに.
を使用することを検討してください。 - CS1529: エラー: using 句は、extern エイリアス宣言以外の、名前空間で定義された他のすべての要素の前に使用しなければなりません。
- CS1537エラー: using エイリアス "alias" は以前にこの名前空間で使用されています。
- CS7000: エラー: エイリアス名の予期しない使用方法です。
- CS7007: エラー:
using static
ディレクティブは型に対してのみ適用できます。代わりにusing namespace
ディレクティブを使用することを検討してください - CS8083: エラー: エイリアスで修飾された名前が式ではありません。
- CS8085: エラー: "using static" ディレクティブはエイリアスの宣言には使用できません。
- CS8914: エラー: グローバル using ディレクティブを名前空間宣言で使用することはできません。
- CS8915: エラー: グローバル using ディレクティブは、すべての非グローバル using ディレクティブの前に指定する必要があります。
- CS9055: エラー: ファイル ローカル型は、"global using static" ディレクティブでは使用できません。
- CS9130: エラー: 使用するエイリアスを
ref
型にすることはできません。 - CS9131: エラー: using エイリアスのみを
unsafe
にできます。 - CS9132: エラー: using エイリアスを null 許容参照型にすることはできません。
- CS9133: エラー:
static
修飾子はunsafe
修飾子より前に指定する必要があります。 - CS9162: 型は "using static" では無効です。使用できるのは、クラス、構造体、インターフェイス、列挙型、デリゲート、または名前空間だけです。
コンパイラ警告は以下のとおりです。
- CS0105: 警告: "namespace" の using ディレクティブは、この名前空間で既に使用されています。
- CS0440: 警告:
global::
はエイリアスではなく常にグローバル名前空間を参照するため、global
という名前のエイリアスを定義することはお勧めしません。 - CS8019: 情報: 不要な using ディレクティブ。
- CS8933: 情報: この using ディレクティブは、以前に global using として使用されています。
これらのエラーと警告は、using
ディレクティブが正しく形成されていないことを示しています。 次のセクションでは、これらのエラーについて言及し、その修正方法について説明します。
using ディレクティブ
using
ディレクティブは、namespace
宣言内の他のどの要素よりも前に、またはファイル内のどの namespace
宣言よりも前に記述する必要があります。 ファイル内で using
ディレクティブを後に記述すると、コンパイラによってエラー CS1529 が生成されます。
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
この問題を解決するには、using
宣言をファイルの先頭に、または名前空間の先頭に移動します。
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
コンパイラでは、using
または global using
ディレクティブで重複している using
ディレクティブに対して、警告 CS8933、CS0105、または診断 CS8019 が生成されます。 重複しているものは削除できます。
using
ディレクティブと、using
ディレクティブ上の static
、global
、または unsafe
修飾子を誤って組み合わせた場合については、この記事で後ほど説明します。
using static ディレクティブ
using static
ディレクティブでは、1 つの型のメンバーを現在の名前空間にインポートします。 次の例では、WriteLine
などのメソッドを、System.Console
から現在の名前空間にインポートします。
using static System.Console;
static
修飾子を省略すると、コンパイラによって CS0138 が生成されます。
using System.Console; // CS0138
型ではなく名前空間をインポートする static
修飾子を含めると、コンパイラによって CS7007 が生成されます。
using static System; // CS7007
シンボルが適切な型でない場合、コンパイラによって CS9162 が出力されます。
using
ディレクティブ内で static
修飾子と unsafe
修飾子を組み合わせる場合は、static
修飾子を最初に指定する必要があります。
using static unsafe UnsafeExamples.UnsafeType;
グローバルな using ディレクティブ
global using
ディレクティブでは、現在のプロジェクト内のすべてのソース ファイルに名前空間または型をインポートします。
global using System.Text;
global using
ディレクティブはいずれも、そのソース ファイル内では非グローバルな using
ディレクティブより前に記述する必要があり、namespace
内に配置することはできません。 それを行ってしまうと、それぞれ CS8915 および CS8914 が生成されます。
さらに、static global using
ディレクティブでは、ファイルローカル型を参照できません。
エイリアスの修飾子
エイリアスの修飾子である ::
の配置場所は、名前空間エイリアスの前、または global
エイリアスの後とします。 ::
where.
を使用して完全修飾名の要素を区切る必要がある場合、コンパイラからは CS0431、CS0432、CS0687、*CS7000、または CS8083 のいずれかが出力されます。
いずれの場合も、::
を区切り記号 .
に置き換えます。
さらに、global
という名前のエイリアスを定義すると、コンパイラによって CS0440 が発行されます。 global
エイリアスによって参照されるのは、常に、グローバル名前空間です。 それに対してエイリアスを宣言しても機能しません。エイリアスには別の名前を選択する必要があります。
エイリアス名の競合
using ディレクティブを使用すれば、名前空間にも型にもエイリアスを宣言できます。
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
エイリアスには一意の名前 (前の例の =
記号の左側にある名前) を作成するようにしてください。 既に型にマップされている名前 (例: Object
) または名前空間 (System
) を使用すると、CS0576 または CS1537 が生成される可能性があります。
using エイリアスの制限事項
C# 12 より前の言語では、型宣言でエイリアスを作成する using
ディレクティブに次の制限が課されていました。
using static
ディレクティブを使用してエイリアスを作成することはできません。using static con = System.Console; using static unsafe ip = int*;
C# 12 以降では、次の制限が導入されています。
in
、ref
、out
修飾子はいずれも、using エイリアス内に使用することができません。// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
unsafe
using ディレクティブを使用する場合は、エイリアスまたはstatic using
を指定する必要があります。// Elsewhere: public namespace UnsafeExamples { public unsafe static class UnsafeType { // ... } } // Using directives: using unsafe IntPointer = int*; using static unsafe UnsafeExamples.UnsafeType; using unsafe UnsafeExamples; // not allowed
null 許容参照型の別名を作成することはできません。
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示