«CompanyName.Foo» — это «пространство имен», но используется как «тип».C#

Место общения программистов C#
Ответить
Anonymous
 «CompanyName.Foo» — это «пространство имен», но используется как «тип».

Сообщение Anonymous »

Повторная формулировка вопроса

Я возобновляю этот вопрос, потому что сегодня снова столкнулся с этой ошибкой и до сих пор совершенно не понимаю, почему компилятор 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»