重述问题
我正在复活这个问题,因为我今天刚刚再次遇到这个错误,我仍然完全混淆为什么C#编译器无法检查命名空间和类型中的类型之间的冲突,因为命名空间不存在.
如果我有...
public Foo MyFoo { get; set; }
Run Code Online (Sandbox Code Playgroud)
...为什么编译器会关心Foo命名空间和类型?您可以将属性声明为命名空间而不是类型吗?
"名称空间使用类似"编译器错误背后的逻辑是什么?这有什么问题可以拯救我?
[我如何标记Eric Lippert?:)]
原始问题
问题
我有一个带有默认命名空间的项目"Foo" CompanyName.Foo.我有一个名为"Foo"的数据库.
当我在数据库上运行SqlMetal.exe时,它会生成一个类CompanyName.Foo.Models.Foo.
然后,当我尝试使用此类作为类型创建属性时,像这样......
using CompanyName.Foo.Models;
...
public Foo DataContext { get; set; }
Run Code Online (Sandbox Code Playgroud)
......我收到错误:
'CompanyName.Foo'是'命名空间',但用作'类型'.
我被迫做...
public CompanyName.Foo.Models.Foo Foo { get; set; } // :-(
Run Code Online (Sandbox Code Playgroud)
问题:
为什么会出现此错误?我的财产声明不包含CompanyName,为什么这是一个问题?简单地说:Foo != CompanyName.Foo.另外,为了确保,我搜索了我的整个解决方案,namespace Foo并提出了零命中(如果我实际使用了命名空间Foo,我可以理解得到错误).
[回答]Foo每次我想使用它时,有没有办法完全符合条件?
[回答]有没有办法让SqlMetal将类命名为Foo(不用更改我的数据库名称)?我可以使用开关更改命名空间,但我不知道如何更改实际的类名.
更新
仍在寻求(1)的答案.
OKW钉(2)和(3).
Usings
我的所有using陈述都提出了要求:
using System;
using System.ComponentModel;
using System.Data.Linq; …Run Code Online (Sandbox Code Playgroud) c# compiler-construction code-generation namespaces linq-to-sql