次の方法で共有


コンパイラ エラー CS0246

更新 : 2008 年 7 月

エラー メッセージ

型または名前空間名 'type/namespace' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。

型が見つかりませんでした。型を含むアセンブリを参照 (/reference) するのを忘れているか、または using ディレクティブを使用して正しく限定していない可能性があります。

このエラーには次のようないくつかの原因があります。

  • 使用する型または名前空間のスペルが間違っている可能性があります (大文字と小文字の区別も含む)。名前が正しくないと、コンパイラは、コード内で参照されている型または名前空間の定義を検索できません。C# では大文字と小文字が区別されるので、大文字と小文字が間違っていると、型の参照時に正しいキャストが使用されません。このエラーが最も頻繁に発生します。たとえば、Dataset ds; では CS0246 エラーが生成されます。これは、Dataset の s が大文字になっていないためです。

  • 名前空間名にエラーがある場合、その名前空間を含むアセンブリを正しく参照 (/reference) できていない可能性があります。たとえば、コードに using Accessibility; という指定があるとします。しかし、プロジェクトが Accessibility.dll アセンブリを参照していない場合、CS0246 エラーが生成されます。開発環境で参照を追加する方法については、「[参照の追加] ダイアログ ボックス」を参照してください。

  • 型名にエラーがある場合は、適切な using ディレクティブを使用していないか、または型名が完全には限定されていない可能性があります。DataSet ds; というコード行があるとします。DataSet 型を使用するには、次の 2 つが必要になります。第 1 に、DataSet 型の定義を含むアセンブリへの参照が必要です。第 2 に、DataSet が配置される名前空間に using ディレクティブが必要です。たとえば、DataSet は System.Data 名前空間に配置されるため、コードの先頭に using System.Data; というステートメントが必要です。

  • 第 2 のステップは必須ではありません。ただし、このステップを省略した場合は、参照時に DataSet 型を完全限定する必要があります。完全限定とは、コードで参照するたびに名前空間と型を使用することです。このため、第 2 のステップをスキップする場合は、上で示した宣言コードを System.Data.DataSet ds; に変更する必要があります。

  • 型そのものに問題がない場合、型を指定しなければならない場所で変数などを使用している可能性があります。たとえば、is ステートメントで、実際の型ではなく型オブジェクトを使用した場合、このエラーが発生します。

  • 型名を完全修飾せずに using alias ディレクティブを使用すると、このエラーが生成されます。using alias ディレクティブでは、ソース コード ファイル内の他の using ディレクティブを使用した型の解決は行われません。たとえば、次のコードでは、System.Collections.Generic に対する using ディレクティブが指定されていますが、型 List<int> が完全修飾されていないため、CS0246 が発生します。

    using System.Collections.Generic;
    // Generates CS0246:
    using myAliasName = List<int>; 
    // Does not generate an error:
    using myAliasName2 = System.Collections.Generic.List<int> 
    

次の例では CS0246 エラーが生成されます。

// CS0246.cs
// using System.Diagnostics;

public class MyClass
{
   [Conditional("A")]   // CS0246, uncomment using directive to resolve
   public void Test()
   {
   }

   public static void Main()
   {
   }
}

実際の型を指定しなければならない場所で型オブジェクトが使用されている例を次に示します。前述の 4 つ目のケースに相当します。

// CS0246b.cs
using System;

class C
{
    public bool supports(object o, Type t)
    {
         if (o is t)  // CS0246 – t is not a type
         {
            return true;
         }
         return false;
    }

    public static void Main()
    {
    }
}

履歴の変更

日付

履歴

理由

2008 年 7 月

エラーの考えられる原因を追加

情報の拡充