編譯器錯誤 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 月 |
加入可能造成這個錯誤的原因。 |
資訊加強。 |