Compiler Error CS0246

未能找到类型或命名空间名称“type/namespace”(是否缺少 using 指令或程序集引用?)

未找到程序中使用的类型或命名空间。可能忘了引用 (/reference) 包含该类型的程序集,或者可能未用 using 指令正确地限定其用法。

以下情况会导致编译器错误 CS0246。

  • 类型或命名空间的名称拼写是否有误?没有正确的名称,编译器就无法找到类型或命名空间的定义。这通常是由于类型名称中使用的大小写形式不正确。例如,Dataset ds; 会生成 CS0246,因为 Dataset 中的 s 必须大写。

  • 如果错误的原因在于命名空间名称,您是否添加了对于包含该命名空间的程序集的引用 (/reference)?例如,您的代码可能包含指令 using Accessibility。但是,如果项目不引用程序集 Accessibility.dll,则会报告错误 CS0246。

  • 如果错误的原因在于类型名称,您是否包括了正确的 using 指令,或是否已完全限定该类型的名称?考虑下列声明:DataSet ds。若要使用 DataSet 类型,需要具备两个条件。第一,需要一个对包含 DataSet 类型定义的程序集的引用。第二,需要对 DataSet 所在的命名空间使用 using 指令。例如,由于 DataSet 位于 System.Data 命名空间中,所以需要在代码的开头使用以下指令:using System.Data。

    using 指令不是必需的。但如果省略该指令,则在引用 DataSet 类型时必须对它进行完全限定。完全限定意味着每次在代码中引用类型时都要同时指定命名空间和类型。如果在上一示例中省略 using 指令,则必须编写 System.Data.DataSet ds 来声明 ds 而不是 DataSet ds。

  • 您是否在需要类型的地方使用了变量或其他某种语言元素?例如,在 is 语句中,如果您使用 Type 对象而不是实际的类型,将会出现错误 CS0246。

  • 是否使用了 using 别名指令,但没有完全限定类型名称? using 别名指令不使用源代码文件中的 using 指令来解析类型。下面的示例生成 CS0246,因为类型 List<int> 未完全限定。 System.Collections.Generic 的 using 指令无法避免该错误。

    using System.Collections.Generic;
    
    // The following declaration generates CS0246.
    using myAliasName = List&lt;int&gt;; 
    
    // To avoid the error, fully qualify List.
    using myAliasName2 = System.Collections.Generic.List&lt;int&gt;;
    

下面的示例生成 CS0246,因为缺少必要的 using 指令。

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

public class MyClass
{
    // The following line causes CS0246\. To fix the error, uncomment
    // the using directive for the namespace for this attribute,
    // System.Diagnostics.
    [Conditional("A")]
    public void Test()
    {
    }

    public static void Main()
    {
    }
}

下面的示例会引发 CS0246,因为在需要实际类型的位置使用了类型为 Type 的对象。

// CS0246b.cs
using System;

class ExampleClass
{
    public bool supports(object o, Type t)
    {
        // The following line causes CS0246\. You must use an
        // actual type, such as ExampleClass, String, or Type.
        if (o is t)
        {
            return true;
        }
        return false;
    }
}

class Program
{
    public static void Main()
    {
        ExampleClass myC = new ExampleClass();
        myC.supports(myC, myC.GetType());
    }
}