共用方式為


編譯器錯誤 CS0246

更新: 2008 年 7 月

錯誤訊息

找不到型別或命名空間名稱 'type/namespace' (您是否遺漏 using 指示詞或組件參考?)

找不到型別。您可能忘記參考 (/reference) 包含型別的組件 (Assembly),或是您可能沒有使用 using 指示詞正確地限定組件的用法。

造成這個錯誤的原因有幾個:

  • 可能是您想要使用的型別或命名空間 (Namespace) 名稱拼字錯誤 (包含正確的大小寫)。若沒有正確的名稱,編譯器就找不到您在程式碼內參考的型別或命名空間定義。發生這個問題的原因通常是因為 C# 會區分大小寫,但在參考該型別時,並未使用正確的大小寫。例如,Dataset ds; 將會產生 CS0246;請注意 Dataset 內的 s 並未大寫。

  • 如果命名空間名稱發生錯誤,可能是您並未參考 (/reference) 包含該命名空間的組件。例如,您的程式碼可能包含 using Accessibility;。不過,若您的專案並未參考 Accessibility.dll 組件,那麼您將得到 CS0246。如需在開發環境中加入參考的相關資訊,請參閱加入參考對話方塊

  • 如果型別名稱發生錯誤,可能是您沒有適當的 using 指示詞,或您並未完整限定型別的名稱。請考慮下列程式碼:DataSet ds;。若要使用 DataSet 型別,您需要做兩件事。首先,您需要參考包含 DataSet 型別定義的組件。其次,DataSet 所在的命名空間需要有一個 using 指示詞。例如,因為 DataSet 位於 System.Data 命名空間,因此程式碼開頭需要有下列陳述式:using System.Data;。

  • 第二個步驟並非必要。不過,若您省略此步驟,那您在參考 DataSet 型別時需要完整地限定它。完整限定 DataSet 型別代表每次您在程式碼內參考它時,都需要使用命名空間和型別。因此,若您決定略過第二個步驟,您需要將上面的宣告程式碼變更為:System.Data.DataSet ds;。

  • 如果是非型別的錯誤,可能是在必須使用型別時使用了變數或其他項目。例如,在 is 陳述式中,如果您使用 Type 物件而非實際型別,便會發生這個錯誤。

  • 如果您使用「using 別名指示詞」(using Alias Directive) 並且未完整限定型別名稱,則會產生此錯誤。using 別名指示詞不會使用原始程式碼檔中其他的 using 指示詞解析型別。例如,下列程式碼會產生 CS0246,因為雖然 System.Collections.Generic 有 using 指示詞,但型別 List<int> 卻未完整限定:

    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()
   {
   }
}

此處範例中使用的是 Type 型別的物件,然而必須是實際型別 (上述案例 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 月

加入可能造成這個錯誤的原因。

資訊加強。