Я возобновляю этот вопрос, потому что сегодня снова столкнулся с этой ошибкой и до сих пор совершенно не понимаю, почему компилятор C# утруждает себя проверкой коллизий между пространствами имен и типами в контекстах, где существование пространства имен не имеет смысла.
Если у меня есть...< /p>
public Foo MyFoo { get; set; }
...почему компилятору важно, что Foo является одновременно пространством имен и типом? Можете ли вы объявить свойство как пространство имен, а не тип?
Какова логика ошибки компилятора «пространство имен используется как тип»? От какой проблемы это меня спасает?
[А как мне отметить Эрика Липперта?
Оригинальный вопрос
Проблема
У меня есть проект «Foo» с пространством имен по умолчанию. ИмяКомпании.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. Кроме того, на всякий случай я просмотрел все свое решение по пространству имен Foo и не нашел результатов (если бы я действительно использовал пространство имен Foo, я мог бы понять, что получил ошибку).
- [ответил] Есть ли способ полностью определить Foo каждый раз, когда я хочу его использовать?
- [ответил] Есть ли какой-нибудь способ полностью определить Foo каждый раз, когда я хочу его использовать?
- [ответил] Есть ли способ полностью определить Foo каждый раз, когда я хочу его использовать?
- [ответил] Есть ли способ полностью определить Foo каждый раз, когда я хочу его использовать?
- [ответил] Есть ли способ полностью определить Foo каждый раз, когда я хочу его использовать?
- [ответил] Есть ли способ полностью определить Foo каждый раз, когда я хочу его использовать?
- [ответил] Есть ли способ полностью определить Foo каждый раз, когда я хочу его использовать? p>
- [ответил] Есть ли способ заставить SqlMetal называть класс как-нибудь, кроме Foo (без изменения имя моей базы данных)? Я могу изменить пространство имен с помощью переключателя, но не знаю, как изменить фактическое имя класса.
Все еще ищу ответ на (1).
ОК. прибито (2) и (3).
Использование
Запрос был сделано для всех моих операторов using:
using System;
using System.ComponentModel;
using System.Data.Linq;
using System.Linq;
using MyCompany.Foo.Models;
Подробнее здесь: https://stackoverflow.com/questions/204 ... ike-a-type
Мобильная версия