Повторение вопроса
Я воскрешаю этот вопрос, потому что сегодня я снова столкнулся с этой ошибкой, и я все еще совершенно смущен, почему компилятор С# пытается проверить наличие конфликтов между пространствами имен и типами в контекстах, где нет смысла для пространства имен существуют.
Если у меня есть...
public Foo MyFoo { get; set; }
... почему компилятор заботится о том, чтобы Foo
являлось как пространством имен, так и типом? Можете ли вы объявить свойство как пространство имен вместо типа?
Какова логика ошибки компилятора, используемого как тип type? Какая проблема заключается в том, чтобы спасти меня?
[И как я могу пометить Эрика Липперта?:)]
Оригинальный вопрос
Проблема
У меня есть проект "Foo" с пространством имен по умолчанию CompanyName.Foo
. У меня есть база данных, которая также называется "Foo".
И когда я запускаю SqlMetal.exe в базе данных, он генерирует класс CompanyName.Foo.Models.Foo
.
Затем, когда я пытаюсь создать свойство с этим классом в качестве типа, вроде этого...
using CompanyName.Foo.Models;
...
public Foo DataContext { get; set; }
... Я получаю сообщение об ошибке:
'CompanyName.Foo' - это "пространство имен", но используется как "тип".
Я вынужден сделать...
public CompanyName.Foo.Models.Foo Foo { get; set; } // :-(
Вопросы:
-
Почему возникает эта ошибка? Объявление моей собственности не содержит
CompanyName
, так почему же это проблема? Проще говоря:Foo != CompanyName.Foo
. Кроме того, чтобы быть уверенным, я выполнил поиск всего моего решения дляnamespace Foo
и придумал нулевые удары (если бы я фактически использовал пространство именFoo
, я мог бы понять, получив ошибку). -
[ответил] Есть ли способ полностью квалифицировать
Foo
каждый раз, когда я хочу его использовать? -
[ответил] Есть ли способ заставить SqlMetal назвать класс чем-то другим, кроме
Foo
(без изменения имени моей базы данных)? Я могу изменить пространство имен с помощью коммутатора, но я не знаю, как изменить фактическое имя класса.
Обновление
Ищем ответ на (1).
O.K.W. (2) и (3).
Usings
Запрос всех моих операторов using
был сделан:
using System;
using System.ComponentModel;
using System.Data.Linq;
using System.Linq;
using MyCompany.Foo.Models;