Ошибка компилятора CS0246
Обновлен: Июль 2008
Сообщение об ошибке
Невозможно найти имя типа или пространства имен "тип/пространство имен" (Пропущена директива "using" или ссылка на сборку?)
The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)
Тип не найден. Возможно, была забыта ссылка (/reference) на сборку, содержащую типу; также возможно, что было неверно уточнено использование ссылки с помощью директивы "using".
Существует несколько причин возникновения этой ошибки:
Возможно, имя типа или пространства имен, которое вы пытаетесь использовать, было указано неправильно (регистр букв учитывается). Если указано неверное имя, компилятор не сможет найти определение типа или пространства имен, на которое ссылается код. Так как C# является чувствительной к регистру средой, чаще всего это случается из-за неверного регистра при написании ссылки на тип. Например, Dataset ds; приводит к возникновению ошибки CS0246, так как буква "s" в "Dataset" строчная.
Если ошибка произошла при именовании пространства имён, возможно, была забыта ссылка (/reference) на сборку, содержащую пространство имен. Например, код может содержать выражение using Accessibility;. Однако, если в проекте нет ссылки на сборку Accessibility.dll, возникнет ошибка CS0246. Сведения о добавлении ссылок в среде разработки см. в разделе Диалоговое окно "Добавление ссылки".
Если ошибка произошла при именовании типа, возможно, используется неверная директива using или не было указано полное имя типа. Рассмотрим следующую строку кода: DataSet ds;. Для использования типа "DataSet" необходимо следующее. Во-первых, требуется ссылка на сборку, содержащую определение типа "DataSet". Во-вторых, требуется директива "using" для пространства имен, в котором содержится "DataSet". Например, если тип "DataSet" расположен в пространстве имен System.Data, в начале кода потребуется следующий оператор: using System.Data;.
Второй этап не требуется. Однако, если пропустить это действие, потребуется полное указание типа "DataSet" при ссылке на него. Полное указание означает, что при каждой ссылке на тип в коде потребуется указывать пространство имен и тип. Поэтому, если решено пропустить второй этап, потребуется изменить вышеприведенный код объявления на: System.Data.DataSet ds;.
Если ошибка связана с отсутствием типа, возможно, была использована переменная или что-либо другое, когда ожидался тип. Например, в если в операторе is использовать объект "Тип", а не фактический тип, возникнет данная ошибка.
Эта ошибка возникает при использовании директивы using alias и при неполном указании имени типа. Для разрешения типов директива using alias в файле исходного кода не использует другие директивы using. Например, в следующем коде генерируется ошибка CS0246, поскольку тип List<int> указан не полностью, несмотря на то, что директива using для System.Collections.Generic присутствует.
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 |
Добавлен возможный случай для ошибки. |
Улучшение информации. |